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



我在窗口上有一个列表框和一个按钮。当ListBox具有焦点时,该按钮的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

这可以在列表框重点进行时,可以在列表框时打开类别,但在列表框失去焦点时不会将其关闭。我认为也许我必须研究一个可以与其他可能获得焦点的控件结合的多点。

编辑2 我应该提到我尝试了:

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

使用转换器:

Return CBool(value)

但这没有更改按钮的ISENABLED属性

您可以将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>

相关内容

最新更新