小编Rac*_*lph的帖子

WiX:手动设置功能的成本

我的安装程序中有一个非标准功能,它不包含任何可安装的文件,而是触发自定义操作。由于此功能不包含任何官方文件组件,因此安装程序显示 0 作为此功能所需的磁盘空间。如何在 WiX 中手动设置功能的成本?

windows-installer wix wix3.6

5
推荐指数
1
解决办法
975
查看次数

如何防止使用控件模板创建的WPF自定义控件从绘制焦点周围?

我正在开发一个从Control派生的自定义控件,并使用ControlTemplate定义.在删除所有铃声和口哨声后,控件只显示四个TextBoxes:

<Style TargetType="{x:Type local:MyControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyControl}">
                <StackPanel Orientation="Horizontal">
                    <TextBox/>
                    <TextBox/>
                    <TextBox/>
                    <TextBox/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

问题是控件能够接收键盘焦点并在自身周围绘制焦点矩形(不是其中一个TextBox,而是围绕所有TextBox).在浏览窗口中的控件时,这会添加不必要的制表位.

在自定义控件上设置Focusible为false(使用样式中的setter)可以解决问题,但是这样的解决方案远非完美,因为使用该控件的开发人员可以将Focusible设置为true,这会破坏制表符停止行为.

我可以响应控件的GotKeyboardFocus事件,并在整个控件获得焦点时将焦点放在第一个TextBox上,但是当返回标签时(使用Shift + Tab),这将无法正常工作,第一个TextBox将获得焦点,而在这种情况下应该首先关注最后一个TextBox.

如何防止整个自定义控件接受键盘焦点,但允许子TextBox正常作为制表位停止?

wpf custom-controls wpf-controls

5
推荐指数
1
解决办法
569
查看次数