从代码中设置 IsFocused 属性

Set IsFocused property from the code

IsFocused属性是只读的,不能直接操作。但是,我需要以相反的方式单击按钮来更改此值:

private Boolean isClicked = false;
private void Toggle_Click (object sender, RoutedEventArgs e){
    if (isClicked) {
         set IsFocued false;
    }
    else {
      set IsFocued True;
    }
    isCLicked = !isCLicked;
}

我想做这样的事情的原因是我想制作一个切换按钮,我的资源是嵌入在代码中的,我不想转换为 Base64 并以这种方式加载它们代码清晰度,因为我发现长序列有点难看。但是我的想法是什么,这里是:

                <Button Name="Toggle" Click="Toggle_Click" Cursor="Hand" Content="" HorizontalAlignment="Left" Margin="82,9,0,0" VerticalAlignment="Top" Width="94" Height="46">
                <Button.Style>
                    <Style TargetType="{x:Type Button}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type Button}">
                                    <Grid Background="{TemplateBinding Background}">
                                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                        <Style.Triggers>
                            <Trigger Property="IsFocused" Value="False">
                                <Setter Property="Background">
                                    <Setter.Value>
                                        <ImageBrush ImageSource="Resources/Off.png" Stretch="Uniform"></ImageBrush>
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                            <Trigger Property="IsFocused" Value="True">
                                <Setter Property="Background">
                                    <Setter.Value>
                                        <ImageBrush ImageSource="Resources/On.png" Stretch="Uniform"></ImageBrush>
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>

所以当按钮被点击时,下次点击时,IsFocused`的值将是false而不是true。任何有关如何执行此操作的帮助将不胜感激。

这是我找到的解决方案:

private Boolean isClicked = false;
private void Toggle_Click (object sender, RoutedEventArgs e){
    if (isClicked) {
     FocusManager.SetFocusedElement(this, Toggle);
    }
    else {
       FocusManager.SetFocusedElement(this, null);
    }
    isCLicked = !isCLicked;
}

可以进一步减少为:

private Boolean isClicked = false;
private void Toggle_Click (object sender, RoutedEventArgs e) {
    FocusManager.SetFocusedElement(this, isClicked ? Toggle : null);
    isCLicked = !isCLicked;
}