Image 带图像背景的可聚焦WinRT用户控件
我很难开发一个WinRT控件,它既可以显示图像,也可以聚焦并接收键盘输入。第一部分——在用户控件中显示图像——很简单;使用以ImageBrush为背景的子矩形效果很好 但是,调用Image 带图像背景的可聚焦WinRT用户控件,image,user-controls,windows-runtime,focusable,Image,User Controls,Windows Runtime,Focusable,我很难开发一个WinRT控件,它既可以显示图像,也可以聚焦并接收键盘输入。第一部分——在用户控件中显示图像——很简单;使用以ImageBrush为背景的子矩形效果很好 但是,调用UserControl.Focus(FocusState.programmative)(或任何其他焦点状态)不起作用-它返回false,并且焦点未设置为用户控件 顺便说一句,这个UserControl目前正在ContentControl中测试,不确定这是否有任何区别 如何使此UserControl可聚焦并能够接收键盘输入
UserControl.Focus(FocusState.programmative)
(或任何其他焦点状态)不起作用-它返回false,并且焦点未设置为用户控件
顺便说一句,这个UserControl目前正在ContentControl中测试,不确定这是否有任何区别
如何使此UserControl可聚焦并能够接收键盘输入?您需要设置
IsTabStop=“True”
以使其聚焦<代码>用户控件的默认值为False
您需要做的另一件事是显示一个焦点指示器,这不是免费使用UserControl
获得的。以下是为其添加视觉效果的方法-从按钮
模板复制:
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup
x:Name="FocusStates">
<VisualState
x:Name="Focused">
<Storyboard>
<DoubleAnimation
Duration="0"
To="1"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="FocusVisualWhite" />
<DoubleAnimation
Duration="0"
To="1"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="FocusVisualBlack" />
</Storyboard>
</VisualState>
<VisualState
x:Name="Unfocused" />
<VisualState
x:Name="PointerFocused" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle
x:Name="FocusVisualWhite"
IsHitTestVisible="False"
Opacity="0"
StrokeDashOffset="1.5"
StrokeEndLineCap="Square"
Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}"
StrokeDashArray="1,1" />
<Rectangle
x:Name="FocusVisualBlack"
IsHitTestVisible="False"
Opacity="0"
StrokeDashOffset="0.5"
StrokeEndLineCap="Square"
Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}"
StrokeDashArray="1,1" />
</Grid>
非常感谢你的详细回答。
protected override void OnGotFocus(RoutedEventArgs e)
{
base.OnGotFocus(e);
this.UpdateVisualState(true);
}
protected override void OnLostFocus(RoutedEventArgs e)
{
base.OnLostFocus(e);
this.UpdateVisualState(true);
}
private void UpdateVisualState(bool useTransitions)
{
switch (this.FocusState)
{
case FocusState.Programmatic:
case FocusState.Keyboard:
VisualStateManager.GoToState(this, "Focused", useTransitions);
break;
case FocusState.Pointer:
VisualStateManager.GoToState(this, "PointerFocused", useTransitions);
break;
case FocusState.Unfocused:
VisualStateManager.GoToState(this, "Unfocused", useTransitions);
break;
}
}