XAML 中的按钮使用 DynamicResource Style 和 DataTrigger
Using DynamicResource Style and DataTrigger for button in XAML
我正在使用像 Style="{DynamicResource SquareButtonStyle}"
这样的预定义样式
无法修改,我需要通过 DataTrigger
.
enable/disable 一个 Button
好像做不到?
The error is: The property 'Style' is set more than once.
<Button Content="Guardar" Width="100" Style="{DynamicResource SquareButtonStyle}" Name="SaveTemplateATM" Click="SaveTemplateATM_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Text.Length, ElementName=UserName, UpdateSourceTrigger=PropertyChanged}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
您只能设置样式属性(或任何属性)一次,但您可以将其设置为基于资源样式的新样式。这意味着它将继承资源样式所具有的所有内容,并且还将具有您自己添加的所有内容。
<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
在这里充其量是无害的,但您不希望它出现在那个绑定上。当target 属性 更改(在本例中为 Button.IsEnabled
)。这在这里没有意义:即使 UserName.Text.Length
不是只读的,Binding
也永远不会更新它,您也不希望它更新。
UpdateSourceTrigger
标志用于修改双向绑定的默认行为,例如,如果您将 TextBox
的 Text
属性 绑定到视图模型字符串 属性,默认行为是在 TextBox
失去焦点时更新视图模型 属性。您可能希望它在每次用户键入字符时更新——在这种情况下,您会给出 Binding
UpdateSourceTrigger=PropertyChanged
。
我正在使用像 Style="{DynamicResource SquareButtonStyle}"
无法修改,我需要通过 DataTrigger
.
Button
好像做不到?
The error is: The property 'Style' is set more than once.
<Button Content="Guardar" Width="100" Style="{DynamicResource SquareButtonStyle}" Name="SaveTemplateATM" Click="SaveTemplateATM_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Text.Length, ElementName=UserName, UpdateSourceTrigger=PropertyChanged}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
您只能设置样式属性(或任何属性)一次,但您可以将其设置为基于资源样式的新样式。这意味着它将继承资源样式所具有的所有内容,并且还将具有您自己添加的所有内容。
<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
在这里充其量是无害的,但您不希望它出现在那个绑定上。当target 属性 更改(在本例中为 Button.IsEnabled
)。这在这里没有意义:即使 UserName.Text.Length
不是只读的,Binding
也永远不会更新它,您也不希望它更新。
UpdateSourceTrigger
标志用于修改双向绑定的默认行为,例如,如果您将 TextBox
的 Text
属性 绑定到视图模型字符串 属性,默认行为是在 TextBox
失去焦点时更新视图模型 属性。您可能希望它在每次用户键入字符时更新——在这种情况下,您会给出 Binding
UpdateSourceTrigger=PropertyChanged
。