Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码中设置IsFocused属性_C#_Wpf_Xaml - Fatal编程技术网

C# 从代码中设置IsFocused属性

C# 从代码中设置IsFocused属性,c#,wpf,xaml,C#,Wpf,Xaml,IsFocused属性是只读的,不能直接操作。但是,我需要在以相反方式单击按钮时更改此值: private Boolean isClicked = false; private void Toggle_Click (object sender, RoutedEventArgs e){ if (isClicked) { set IsFocued false; } else { set IsFocued True; } isCLi

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;
}

尝试FocusManager.SetFocusedElement方法也很有用的是本文-Focus Overview@Gusdor:这两个参数是什么,
DependencyObject元素
IIInputElement值
,其中应该包含什么?@Gusdor:
FocusManager.SetIsFocusScope(切换,true)此方法不适用work@Gusdor:谢谢,我猜你知道当你点击另一个元素时IsFocused会变成false吗?@Blam:如果没有其他可聚焦的元素呢?那么它会改变吗?在这种情况下该怎么办?好吧,如果只有一个可聚焦的元素,你就有了一个解决方案。这是有限的。唯一可聚焦的元素不在问题中。大多数人不会认为按钮是唯一可聚焦的元素。