- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面是相关代码。在我的 RepeatButton 的初始化中,我给了它们 ScrollBar.LineRight/LeftCommand。
但是在我的 RepeatButton 的 ControlTemplate 中,我需要触发 RepeatButton 的 IsEnabled 属性。
我想将 RepeatButton 的 IsEnabled 绑定(bind)到命令的 CanExecute,并在 XAML 中完成。
<Style x:Key="WindowTabScrollerStyle" TargetType="{x:Type ScrollViewer}">
<Style.Resources>
<Style x:Key="WindowTabScrollBarStyle" TargetType="{x:Type ScrollBar}">
<Style.Resources>
<Style x:Key="WindowTabScrollerRepeatButtonStyle" TargetType="{x:Type RepeatButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Grid>
<Border Name="PART_Border" BorderThickness="2" BorderBrush="{StaticResource TabScrollerButtonBorderBrush}" Background="{StaticResource TabScrollerButtonBackgroundBrush}" />
<Canvas Width="5" Height="17" HorizontalAlignment="Center" VerticalAlignment="Center">
<Path Name="ScrollArrowImage"
Fill="{StaticResource TabScrollerButtonArrowBrush}"/>
</Canvas>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Name" Value="LeftScrollButton">
<Setter TargetName="ScrollArrowImage" Property="Data" Value="m5.44,11.6v5.797l-5.437,-8.696l5.437,-8.696v5.797l-1.812,2.899l1.812,2.899z"/>
</Trigger>
<Trigger Property="Name" Value="RightScrollButton">
<Setter TargetName="ScrollArrowImage" Property="Data" Value="m0,11.6v5.797l5.437,-8.696l-5.437,-8.696v5.797l1.812,2.899l-1.812,2.899z"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="RepeatButton.IsPressed" Value="True"/>
<Condition Property="RepeatButton.IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Setter TargetName="ScrollArrowImage" Property="Fill" Value="{StaticResource PressedTabScrollerButtonArrowBrush}"/>
<Setter TargetName="PART_Border" Property="BorderBrush" Value="{StaticResource PressedTabScrollerButtonBorderBrush}"/>
<Setter TargetName="PART_Border" Property="Background" Value="{StaticResource PressedTabScrollerButtonBackgroundBrush}"/>
</MultiTrigger>
<Trigger Property="RepeatButton.IsEnabled" Value="False">
<Setter TargetName="ScrollArrowImage" Property="Fill" Value="{StaticResource DisabledTabScrollerButtonArrowBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="20" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Interval" Value="50" />
<Setter Property="Opacity" Value=".7" />
<Setter Property="Margin" Value="2,1" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="1" />
</Trigger>
</Style.Triggers>
</Style>
</Style.Resources>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="0.00001*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<RepeatButton Grid.Column="0" Name="LeftScrollButton"
Style="{StaticResource WindowTabScrollerRepeatButtonStyle}"
Command="ScrollBar.LineLeftCommand" />
<RepeatButton Grid.Column="2" Name="RightScrollButton"
Style="{StaticResource WindowTabScrollerRepeatButtonStyle}"
Command="ScrollBar.LineRightCommand" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Cursor" Value="Arrow" />
<Setter Property="Background" Value="Transparent" />
</Style>
</Style.Resources>
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="VerticalScrollBarVisibility" Value="Visible" />
<Setter Property="Margin" Value="36,0,0,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<ScrollContentPresenter x:Name="ScrollContentPresenter"
CanContentScroll="True"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Cursor="{TemplateBinding Cursor}" />
<ScrollBar x:Name="PART_HorizontalScrollBar"
Grid.Column="0"
Grid.Row="0"
Style="{StaticResource WindowTabScrollBarStyle}"
MinHeight="30"
Maximum="{TemplateBinding ScrollableWidth}"
Minimum="0"
Value="{TemplateBinding HorizontalOffset}"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{Binding ComputedHorizontalScrollBarVisibility, RelativeSource={RelativeSource TemplatedParent}}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
最佳答案
通过 DataTriggers 和比较其绑定(bind)相等性的 MultiValueConverter,我让它发挥作用。这可能不是最好的方法,但由于 DataTriggers 在 ScrollBar 的 ControlTemplate 中,而且我依赖于两个 ScrollViewer 属性的相等性,所以这是最好的选择。
<Style x:Key="WindowTabScrollerStyle" TargetType="{x:Type ScrollViewer}">
<Style.Resources>
<Style x:Key="WindowTabScrollBarStyle" TargetType="{x:Type ScrollBar}">
<Style.Resources>
<Style x:Key="WindowTabScrollerRepeatButtonStyle" TargetType="{x:Type RepeatButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Grid>
<Border Name="PART_Border" BorderThickness="2"
BorderBrush="{StaticResource TabScrollerButtonBorderBrush}"
Background="{StaticResource TabScrollerButtonBackgroundBrush}" />
<Canvas Width="5" Height="17" HorizontalAlignment="Center" VerticalAlignment="Center">
<Path Name="ScrollArrowImage"
Fill="{StaticResource TabScrollerButtonArrowBrush}" />
</Canvas>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Name" Value="LeftScrollButton">
<Setter TargetName="ScrollArrowImage" Property="Data"
Value="m5.44,11.6v5.797l-5.437,-8.696l5.437,-8.696v5.797l-1.812,2.899l1.812,2.899z" />
</Trigger>
<Trigger Property="Name" Value="RightScrollButton">
<Setter TargetName="ScrollArrowImage" Property="Data"
Value="m0,11.6v5.797l5.437,-8.696l-5.437,-8.696v5.797l1.812,2.899l-1.812,2.899z" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsPressed" Value="True" />
<Condition Property="IsEnabled" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="ScrollArrowImage" Property="Fill"
Value="{StaticResource PressedTabScrollerButtonArrowBrush}" />
<Setter TargetName="PART_Border" Property="BorderBrush"
Value="{StaticResource PressedTabScrollerButtonBorderBrush}" />
<Setter TargetName="PART_Border" Property="Background"
Value="{StaticResource PressedTabScrollerButtonBackgroundBrush}" />
</MultiTrigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="ScrollArrowImage" Property="Fill"
Value="{StaticResource DisabledTabScrollerButtonArrowBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="20" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Interval" Value="50" />
<Setter Property="Opacity" Value=".7" />
<Setter Property="Margin" Value="2,1" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="1" />
</Trigger>
</Style.Triggers>
</Style>
</Style.Resources>
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Cursor" Value="Arrow" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollBar}">
<ControlTemplate.Resources>
<converters:IsEqualMultiConverter x:Key="IsEqualMultiConverter" />
</ControlTemplate.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="0.00001*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<RepeatButton Grid.Column="0" Name="LeftScrollButton"
Style="{StaticResource WindowTabScrollerRepeatButtonStyle}"
Command="ScrollBar.LineLeftCommand" />
<RepeatButton Grid.Column="2" Name="RightScrollButton"
Style="{StaticResource WindowTabScrollerRepeatButtonStyle}"
Command="ScrollBar.LineRightCommand" />
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource IsEqualMultiConverter}">
<Binding ElementName="PART_TabScroller" Path="HorizontalOffset" />
<Binding ElementName="PART_TabScroller" Path="ScrollableWidth" />
</MultiBinding>
</DataTrigger.Binding>
<Setter TargetName="RightScrollButton" Property="RepeatButton.IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding HorizontalOffset, ElementName=PART_TabScroller}" Value="0">
<Setter TargetName="LeftScrollButton" Property="RepeatButton.IsEnabled" Value="False" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Style.Resources>
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="VerticalScrollBarVisibility" Value="Visible" />
<Setter Property="Margin" Value="36,0,0,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<ScrollContentPresenter x:Name="ScrollContentPresenter"
CanContentScroll="True"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Cursor="{TemplateBinding Cursor}" />
<ScrollBar x:Name="PART_HorizontalScrollBar"
Grid.Column="0"
Grid.Row="0"
Style="{StaticResource WindowTabScrollBarStyle}"
MinHeight="30"
Maximum="{TemplateBinding ScrollableWidth}"
Minimum="0"
Value="{TemplateBinding HorizontalOffset}"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
关于c# - 使用 XAML 在最大和最小滚动边界上禁用 ScrollBar 的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076243/
如标题所述,我遇到了两个 using 指令之间引用不明确的问题。 一个是System.Windows.Forms: using System.Windows.Forms; 另一个来自自定义库,Arct
我遇到了 Internet Explorer 中显示滚动条的问题。 我有一个 div,它的内容可以比 div 本身更宽,所以会出现一个水平滚动条。水平滚动条很好,但如果显示水平滚动条,Internet
情况是这样的...... 我正在使用 jQuery/AJAX 将各种 HTML 序列调用到我的主控制面板/网页中。 一些请求返回一个很长的结果,并且需要在弹出框内显示一个滚动条。 当客户关闭最初的长结
我构建了一个控件,为 JavaFX 提供类似 Twitter Bootstrap 导航栏的行为。它基本上由一个 StackPane 和一个背面的 ScrollPane 组成,一个 BorderPane
发现一个奇怪的问题,做了一些谷歌搜索,但没有找到任何有类似问题的人。 简而言之。我在另一个位置固定的 div 中有一个位置固定的 div。在非视网膜上,一切都很好,但在 macbook 视网膜(web
我正在尝试查看 webkit 伪元素的默认 css 值(可能是源代码?),以便我可以创建与默认值非常相似但略有自定义的自定义 webkit 元素。 这些元素是不显示在 DOM 中的影子元素。您可以在
我有以下 CSS 规则: ::-webkit-scrollbar-thumb:vertical:hover { background-color: #666; } 我还想在悬停 webkit-
我的网页有居中的页眉、内容和页脚 div,每个 div 的宽度都是 900 像素。 (关于页眉、内容和页脚,我能提供的唯一其他可能相关的信息是页眉具有固定定位,内容是相对定位的,页脚是绝对定位的。但是
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
我的网站在 Chrome 和 Firefox 中都有一个双滚动条(这两种浏览器都是最新的)。我一直在研究网络和 stackoverflow,并尝试遵循 html 元素上的建议选项: html { 溢出
我想更改滚动条的样式,为此我在 css 下方使用,但我想将它用于页面上的特定 div,而不是整个页面。 我如何使用 div 类或 id 自定义它 ::-webkit-scrollbar { w
我正在使用 jScrollPane,只是因为它是 Google 上的第一件事,而且我很累。所以,我首先要说我不反对使用不同的东西。 我有一个 2 列的部分。右列使用 jScrollPane 插件并具有
我正在尝试向 JList(使用自定义数据模型)添加滚动条。添加 JScrollPane 实际上隐藏了 JList,而不是添加滚动条。当我使用滚动条运行代码时,JList 不可见,也看不到数据。 pla
请引用这里的表格。 http://www.funkkopfhoerer-test.com/vergleichstabelle-funkkopfhoerer/ 我正在使用表插件,并在其顶部创建了一个自定
是否可以在scintilla控件的滚动条中标记搜索结果/断点/书签?就像在 Google Chrome 或 JetBrains IDE 中所做的那样。 最佳答案 是的,这是可能的。 首先您必须知道要标
我正在尝试让 javascript 将页面滚动到目标位置,例如: scrollbarxpos += (targetscrollbarxpos - scrollbarxpos) / 100.0f; 基本
我有一个带有 Canvas 和 ScrollBar 的简单 JavaFX 应用程序。Canvas 充当虚拟 Canvas ,其内容可以使用 ScrollBar 滚动。 Canvas 的宽度为 500
我正在尝试实现类似于 Excel 的“无限”滚动能力的功能;因为用户可以滚动到文档的“底部”;但随后继续滚动(使用滚轮或滚动条上的向下箭头),并且为它们生成更多空行。我大部分时间都在工作(使用鼠标滚轮
我有一个奇怪的行为问题: 我在 ScrollView 中有一个 WebView。 WebView 声明如下: let webView = UIWebView(frame:CGRectMake(x,0,
我是一名优秀的程序员,十分优秀!