在XAML中为按钮使用DynamicSource样式和DataTrigger
我正在使用预定义的样式,如在XAML中为按钮使用DynamicSource样式和DataTrigger,xaml,datatrigger,dynamicresource,Xaml,Datatrigger,Dynamicresource,我正在使用预定义的样式,如style=“{DynamicResource SquareButtonStyle}” 无法修改,我需要通过DataTrigger启用/禁用按钮 这似乎是不可能做到的 错误是:属性“Style”设置了多次 只能设置样式属性(或任何属性)一次,但可以将其设置为基于资源样式的新样式。这意味着它将继承资源样式所拥有的一切,再加上您自己添加的任何内容 <Button Content="Guardar" Width="100" Name="SaveTemplateATM"
style=“{DynamicResource SquareButtonStyle}”
无法修改,我需要通过DataTrigger
启用/禁用按钮
这似乎是不可能做到的
错误是:属性“Style”设置了多次
只能设置样式属性(或任何属性)一次,但可以将其设置为基于资源样式的新样式。这意味着它将继承资源样式所拥有的一切,再加上您自己添加的任何内容
<Button Content="Guardar" Width="100" Name="SaveTemplateATM" Click="SaveTemplateATM_Click">
<Button.Style>
<Style
TargetType="{x:Type Button}"
BasedOn="{StaticResource SquareButtonStyle}"
>
<Style.Triggers>
<DataTrigger
Binding="{Binding Text.Length, ElementName=UserName}"
Value="0"
>
<Setter
Property="IsEnabled"
Value="False"
/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
另外,UpdateSourceTrigger=PropertyChanged
在这里充其量是无害的,但您不希望它出现在该绑定上。该标志的作用是告诉绑定
如何在目标属性更改时更新绑定的源属性(在本例中为UserName.Text.Length
)(在本例中为按钮.IsEnabled
)。这在这里没有意义:即使UserName.Text.Length
不是只读的,Binding
也永远不会更新它,您也不希望它更新
UpdateSourceTrigger
标志用于修改双向绑定的默认行为,例如,如果将TextBox
的Text
属性绑定到viewmodel字符串属性,则默认行为是在TextBox
失去焦点时更新viewmodel属性。您可能希望它在用户每次键入字符时更新—在这种情况下,您将提供绑定UpdateSourceTrigger=PropertyChanged
谢谢大家!!当我使用您的代码时,我收到消息附加信息:不能在类型为“Style”的“BasedOn”属性上设置“DynamicResourceExtension”。“DynamicResourceExtension”只能在DependencyObject的DependencyProperty上设置。
@Dimi-Hmm。不太好。它是否允许您使用静态资源
而不是动态资源
?是的。谢谢大家!@迪米,这让我松了一口气!
<Button Content="Guardar" Width="100" Name="SaveTemplateATM" Click="SaveTemplateATM_Click">
<Button.Style>
<Style
TargetType="{x:Type Button}"
BasedOn="{StaticResource SquareButtonStyle}"
>
<Style.Triggers>
<DataTrigger
Binding="{Binding Text.Length, ElementName=UserName}"
Value="0"
>
<Setter
Property="IsEnabled"
Value="False"
/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>