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:如果没有其他可聚焦的元素呢?那么它会改变吗?在这种情况下该怎么办?好吧,如果只有一个可聚焦的元素,你就有了一个解决方案。这是有限的。唯一可聚焦的元素不在问题中。大多数人不会认为按钮是唯一可聚焦的元素。