![](/img/trans.png)
[英]Why does bool work for visibility without a converter when using traditional binding
[英]ComputedVerticalScrollBarVisibility Trigger does not work if using binding/converter
这个问题与我的另一个SO问题非常相关,但是这个问题更加具体。 随时询问其他问题以获取更多详细信息,但是我应该在此处提供您所需的一切。
我已经为列表视图实现了自定义样式,以便可以使用以下内容访问滚动条属性(我删除了一些不相关的杂项)
<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="ScrollViewer">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollViewer">
<Grid Background="{TemplateBinding Background}">
<DockPanel Margin="{TemplateBinding Padding}">
<ScrollViewer DockPanel.Dock="Top" Focusable="false">
</DockPanel>
<ScrollBar Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Row="1" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Value="{TemplateBinding HorizontalOffset}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
<ScrollBar Name="PART_VerticalScrollBar" Grid.Column="1" Margin="20,0" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Value="{TemplateBinding VerticalOffset}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ComputedVerticalScrollBarVisibility" Value="Collapsed">
<Setter Property="Width">
<Setter.Value>
<Binding
ConverterParameter="400"
RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type ListView}}"
>
<Binding.Converter>
<Converters:ListViewColumnResizeConverter/>
</Binding.Converter>
</Binding>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="ComputedVerticalScrollBarVisibility" Value="Visible">
<Setter Property="Width">
<Setter.Value>
<Binding
ConverterParameter="500"
RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type ListView}}"
>
<Binding.Converter>
<Converters:ListViewColumnResizeConverter/>
</Binding.Converter>
</Binding>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
请注意,我有两个触发器,一个是Visible
,另一个是Collapsed
。 当我运行我的应用程序时,无论如何,我都会Visible
和“ Collapsed
。 我什至延迟了使用计时器加载数据的时间,并且未触发任何Visible
。 是否有我缺少的东西,或者这是Dependency Property
未正确触发的错误?
UPDATE
因此,我注意到该系统的准系统正在运行(不使用绑定和转换器),因此我从代码中删除了该系统,并使触发器简单地更新了背景色。 而且,它起作用了,那么为什么添加绑定/转换器会使触发器混乱呢?
好吧,答案肯定对我没有帮助,但是似乎绑定中的值已被缓存。 由于我的代码隐藏转换器更像是一种获取对Computed触发器的代码访问权限的工具,所以我什至没有使用返回值。 但是,我继续将唯一的颜色值绑定到每个触发器,并且一旦滚动条变得可见,我的代码就不再被击中,而是使用了初始调用的返回值。 我必须承认,这在MS团队中相当聪明,但对我来说却是一个绊脚石。 如果用户具有将用于每个触发器的时间相关值怎么办?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.