試圖找到解決以下問題的方法。如何從子元素條件的父元素DataTrigger
我的目標是: 如果Button中的某個子元素不包含文本,則禁用父按鈕。
那麼,到底是什麼我試圖做:
創建一個按鈕:
<Button Style="{StaticResource ButtonStyle}" >
<TextBlock>
<Run Name="TxtElement1" Text=""/>
</TextBlock>
</Button>
<Button Style="{StaticResource ButtonStyle}" >
<TextBlock>
<Run Name="TxtElement2" Text="some text 1"/>
</TextBlock>
</Button>
<Button Style="{StaticResource ButtonStyle}" >
<TextBlock>
<Run Name="TxtElement3" Text="some text 2"/>
</TextBlock>
</Button>
現在創建一個風格的觸發器:
<Style x:Key="ButtonStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=TxtElement1, Path=Text}" Value="">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=TxtElement2, Path=Text}" Value="">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=TxtElement3, Path=Text}" Value="">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
所以,結果我得到: 所有ToggleButtons被禁用。 但我需要只禁用按鈕時,屬性文本中運行子元素爲空
也許我使用根本上錯誤的方法..感謝您的任何關注。
Tbh,這完全沒有意義......爲什麼你甚至會像這樣設計你的按鈕?使用按鈕的「內容」,並進行自我約束 – lokusking
在我的情況下,我使用按鈕內容的幾個來源。看起來像:' ' –
好吧。對你有好處。不改變它真的很奇怪的事實,這不會工作。樣式在**按鈕之前定義**,因此對按鈕的內容沒有任何瞭解(對於一些簡單的文本,您應該真的使用它)。解決方法可能是「ControlTemplate」或「行爲」或「代碼隱藏」。但是對於普通的XAML,你會有一段糟糕的時光 – lokusking