从代码中设置IsFocused属性

时间:2015-02-20 13:59:51

标签: 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;
    }
    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。任何有关如何做到这一点的帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

这是我找到的解决方案:

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

答案 1 :(得分:0)

可以进一步减少:

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