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