[英]How to write a DataTrigger based on hashcode of a Control in WPF
我有一個屬性HashCodeValue
。 基於 HashCodeValue 屬性中的 HashCode,我需要使用 DataTrigger 更改控件的可見性。
WPF XAML 源代碼:
<Style TargetType="{x:Type DataGridColumnHeader}" x:Key="DummyFilterDataGridColumnHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Button Content="Super I" Visibility="Collapsed" />
<Button Content="Super II" Visibility="Collapsed" />
<Button Content="Super III" Visibility="Collapsed" />
<ControlTemplate.Triggers>
<DataTrigger Property="{Binding HashCodeValue}" Value="???">
<Setter TargetName="Button" Property="Visibility" Value="Visible" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我們無法在編譯時知道 HashCode,它僅在運行時生成。 在三個按鈕中,該屬性在運行時保存任何一個按鈕的 HashCode。 根據該值,我想將相應按鈕的 Visibility 更改為Visible
。
請幫助我如何為我的場景編寫 DataTrigger。
由於 Hashcode 值僅在運行時已知,我認為您應該使用 IValueConverter 來實現您的目標。 基本思想是你有哈希作為轉換器值,一些額外的字符串作為轉換器參數,得到 bool 作為轉換器輸出。
因此,您的代碼可能如下所示:
<ControlTemplate.Triggers>
<DataTrigger Property="{Binding HashCodeValue,Converter={StaticResource myConverter,ConverterParameter=myparameter}}" Value="true">
<Setter TargetName="Button" Property="Visibility" Value="Visible" />
</DataTrigger>
</ControlTemplate.Triggers>
如果我理解正確的話,這個技巧會給你你需要的東西。
你必須把Hashcodevalue的Value
在DataTrigger
你綁定。
<Style TargetType="{x:Type DataGridColumnHeader}" x:Key="DummyFilterDataGridColumnHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<StackPanel Name="ButtonsPanel">
<Button Name="BtnSuper1" Content="Super I" Visibility="Collapsed">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</Button.Style>
</Button>
<Button Name="BtnSuper2" Content="Super II" Visibility="Collapsed">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</Button.Style>
</Button>
<Button Name="BtnSuper3" Content="Super III" Visibility="Collapsed" >
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</Button.Style>
</Button>
</StackPanel>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding HashCodeValue}" Value="Give Your HashCode for matching ">
<Setter TargetName="BtnSuper1" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding HashCodeValue}" Value="Give Your HashCode for matching">
<Setter TargetName="BtnSuper2" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding HashCodeValue}" Value="Give Your HashCode for matching ">
<Setter TargetName="BtnSuper3" Property="Visibility" Value="Visible" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.