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