使用样式触发器更改另一个控件

时间:2017-12-04 13:12:00

标签: wpf xaml triggers

我在窗口上有一个ListBox和一个Button。当ListBox具有焦点时,Button的IsEnabled属性应为True。这是我尝试过的:

<Style TargetType="{x:Type ListBox}">
    <Setter
        Property="Margin"
        Value="15,0,15,20"></Setter>
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True" />
            <Setter TargetName="btnActivate" Property="IsEnabled" Value="True" />
        </Style.Triggers>
</Style>

这看起来非常简单,但我收到一条错误消息

  

btnActivate无法识别。

这样做的正确方法是什么?

编辑1 我实现了MoonMoo的建议链接如下:

IsEnabled="{Binding ElementName=lstInactive, Path=SelectedIndex, Converter={StaticResource cvtr}}">

使用此转换器:

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
        Dim IsFocused As Integer = CInt(value)
        Return If(IsFocused > -1, True, False)
    End Function

这可以在列表框聚焦时启用IsEnabled,但在列表框失去焦点时不会将其关闭。我想也许我必须研究一个多绑定,它也会绑定到可能引起关注的其他控件。

编辑2 我应该提一下,我试过了:

IsEnabled="{Binding ElementName=lstInactive, Path=IsFocused, Converter={StaticResource cvtr}}">

带转换器:

Return CBool(value)

但是没有改变按钮的IsEnabled属性

1 个答案:

答案 0 :(得分:0)

您可以使用DataTrigger作为按钮:

<Button> 
   <Button.Style>
     <Style TargetType="Button">
        <Setter Property="IsEnabled" Value="False"/>
     <Style.Triggers>
        <DataTrigger Binding="{Binding IsFocused,ElementName=YourListBoxName}" Value="True">
           <Setter Property="IsEnabled" Value="True"/>
         </DataTrigger>
     </Style.Triggers>
    </Style>
   </Button.Style>
</Button>