Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 带图像背景的可聚焦WinRT用户控件_Image_User Controls_Windows Runtime_Focusable - Fatal编程技术网

Image 带图像背景的可聚焦WinRT用户控件

Image 带图像背景的可聚焦WinRT用户控件,image,user-controls,windows-runtime,focusable,Image,User Controls,Windows Runtime,Focusable,我很难开发一个WinRT控件,它既可以显示图像,也可以聚焦并接收键盘输入。第一部分——在用户控件中显示图像——很简单;使用以ImageBrush为背景的子矩形效果很好 但是,调用UserControl.Focus(FocusState.programmative)(或任何其他焦点状态)不起作用-它返回false,并且焦点未设置为用户控件 顺便说一句,这个UserControl目前正在ContentControl中测试,不确定这是否有任何区别 如何使此UserControl可聚焦并能够接收键盘输入

我很难开发一个WinRT控件,它既可以显示图像,也可以聚焦并接收键盘输入。第一部分——在用户控件中显示图像——很简单;使用以ImageBrush为背景的子矩形效果很好

但是,调用
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;
    }
}