【发布时间】:2018-06-02 16:42:05
【问题描述】:
试图找到解决以下问题的方法。
我的目标是: 如果 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>
所以,我得到的结果是:所有切换按钮都被禁用。 但是当运行子元素中的属性文本为空时,我只需要禁用按钮
也许我使用了完全错误的方法.. 感谢您的关注。
【问题讨论】:
-
Tbh,这完全没有意义......你为什么要这样设计你的按钮?使用按钮的
Content并进行自绑定 -
就我而言,我使用的按钮内容来源很少。看起来像:
<TextBlock > <Run Text="Some text"/> <Run Name="TxtElement3" Text="{Binding SomeTextFromVM}"/> </TextBlock> -
好的。对你有益。不会改变它真的很奇怪而且这不起作用的事实。样式是在您的按钮之前定义的,因此不了解按钮的内容(您应该真正将其用于一些简单的文本)。解决方法可能是
ControlTemplate或 Behavior 或 CodeBehind。但是使用普通的 XAML,你会度过一段糟糕的时光 -
当然是在我真正的 XAML Style 之前写的 Buttons。很抱歉造成混淆。您可以透露一些我如何使用 ControlTemplate 来解决我的问题的细节?我将不胜感激