在WPF项目的XAML中更改其GotFocus事件的usercontrol边框

时间:2015-01-19 15:16:57

标签: c# wpf xaml user-controls eventtrigger

我有一个UserControl,其中包含一个包含Border的网格:

<UserControl Focusable="True" Name="uctrlScenePanel">
    <Grid MouseDown="Grid_MouseDown">
      <Border BorderThickness="0" BorderBrush="Black">
      </Border>
    </Grid>

我现在想要在用户控制&#34; uctrlScenePanel&#34;之后更改边框厚度。得到了Focus,但我无法让它工作,我真的找不到有用的Eventtrigger-Tutorials,这是可以理解的,因为我对WPF很新。

编辑: d.moncada的回答非常有帮助!我的xaml现在看起来像这样:

       <Border BorderBrush="Black">
            <Border.Style>
                <Style TargetType="Border">
                    <Setter Property="BorderThickness" Value="0" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsKeyboardFocusWithin, ElementName=uctrlScenePanel}" Value="true">
                            <Setter Property="BorderThickness" Value="2" />
                            <Setter Property="Background" Value="Green" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsKeyboardFocusWithin, ElementName=uctrlScenePanel}" Value="false">
                            <Setter Property="BorderThickness" Value="0" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>

我还有问题,因为用户控件的聚焦行为很奇怪,但那是另一个故事......这个问题已经解决了,谢谢你的教训;)

1 个答案:

答案 0 :(得分:1)

您可以使用UserControl绑定到IsFocused DataTrigger媒体资源。

<UserControl Focusable="True" x:Name="uctrlScenePanel">
    <Grid MouseDown="Grid_MouseDown">
      <Border BorderBrush="Black">
        <Broder.Style>
            <Style TargetType="Border">
                <Setter Property="BorderThickness" Value="1"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsFocused, ElementName=uctrlScenePanel}" Value="True">
                        <Setter Property="BorderThickness" Value="0"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
      </Border>
    </Grid>
</UserControl>