我想Button在ListView空的情況下更改 WPF 的影像,但我現在不知道哪個是我必須從觸發器設定的屬性。
<Style x:Key="DisableOnEmptyLvStyle" TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=myListView, Path=Items.Count}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
<!-- which button property I must set here? -->
</DataTrigger>
</Style.Triggers>
</Style>
<Button Style="{StaticResource DisableOnEmptyLvStyle}">
<Image Source="{StaticResource myImage}"/>
</Button>
一旦ListView有物品,則影像必須更改為正常影像。
任何想法如何做到這一點?
uj5u.com熱心網友回復:
您永遠不應該Content直接使用 a 來設定Style,僅僅因為Style被實體化一次并且可能在多個控制元件中重用。問題是您在Setterfor中分??配的值Content也被實體化一次并共享,但控制元件在 WPF 中只能有一個父級。
會出什么問題?如果您設定或更改Content樣式并參考它,例如多個Buttons,您將看到只有最后一個按鈕顯示影像。第一個按鈕將其影像設定為Content,然后下一個按鈕將影像設定為Content并有效地洗掉第一個按鈕的內容。
您可以考慮兩種選擇。
將影像創建為資源,并通過將
x:Shared屬性設定為 來強制 XAML 中的每個參考獲取影像的新實體False。當設定為 時
false,修改 WPF 資源檢索行為,以便對屬性資源的請求為每個請求創建一個新實體,而不是為所有請求共享同一個實體。<Window.Resources> <!-- ...your image sources for "myImage" and "myImage". --> <Image x:Key="myImageConrol" x:Shared="False" Source="{StaticResource myImage}"/> <Image x:Key="myOtherImageConrol" x:Shared="False" Source="{StaticResource myImage}"/> <Style x:Key="DisableOnEmptyLvStyle" TargetType="{x:Type Button}"> <Setter Property="Content" Value="{StaticResource myImageConrol}"/> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=myListView, Path=Items.Count}" Value="0"> <Setter Property="IsEnabled" Value="False" /> <Setter Property="Content" Value="{StaticResource myOtherImageConrol}"> </Setter> </DataTrigger> </Style.Triggers> </Style> </Window.Resources><Button Style="{StaticResource DisableOnEmptyLvStyle}"/>創建資料模板并將它們換掉。這是因為——顧名思義——它們是模板,并且它的控制元件將針對它們應用到的每個控制元件進行實體化。
<Style x:Key="DisableOnEmptyLvStyle" TargetType="{x:Type Button}"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Image Source="{StaticResource myImage}"/> </DataTemplate> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=myListView, Path=Items.Count}" Value="0"> <Setter Property="IsEnabled" Value="False" /> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Image Source="{StaticResource myOtherImage}"/> </DataTemplate> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style><Button Style="{StaticResource DisableOnEmptyLvStyle}"/>
uj5u.com熱心網友回復:
請嘗試以下方法:
<Style x:Key="DisableOnEmptyLvStyle" TargetType="{x:Type Button}">
<Setter Property="Content">
<Setter.Value>
<Image Source="{StaticResource myImageAtLeastOne}"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=myListView, Path=Items.Count}" Value="0">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Content">
<Setter.Value>
<Image Source="{StaticResource myImageEmpty}"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
<Button Style="{StaticResource DisableOnEmptyLvStyle}" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/450815.html
標籤:wpf xml wpf 控件 数据触发器 wpf 风格
下一篇:如何在VM出現V時呼叫重繪任務
