1

我正在使用预定义的样式,例如Style="{DynamicResource SquareButtonStyle}"

无法修改,我需要启用/禁用Buttonvia DataTrigger

这似乎是不可能的事?

错误是:属性“样式”设置了多次。

<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>
4

1 回答 1

3

您只能设置一次样式属性(或任何属性),但您可以将其设置为基于资源样式的新样式。这意味着它将继承资源样式所具有的所有内容,此外,它还将拥有您自己添加的任何内容。

<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这里充其量是无害的,但您不希望它在该绑定上。该标志的作用是告诉Binding如何在目标属性更改时(在这种情况下)更新绑定的属性(在这种情况下)。这在这里没有意义:即使不是只读的,也永远不会更新它,你也不希望它更新。UserName.Text.LengthButton.IsEnabledUserName.Text.LengthBinding

这些UpdateSourceTrigger标志用于修改双向绑定的默认行为,例如,如果您将Texta 的属性绑定TextBox到 viewmodel 字符串属性,则默认行为是在TextBox失去焦点时更新 viewmodel 属性。您可能希望它在每次用户键入字符时更新——在这种情况下,您将给出Binding UpdateSourceTrigger=PropertyChanged.

于 2016-10-27T13:19:52.963 回答