从代码中设置 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;
}
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;
}