Mar*_*eIV 8 wpf containers focus mdichild focusmanager
我们有一个自定义画布,其中有专门的节点,其行为很像标准的MDI应用程序的窗口.期望的行为是,如果"窗口"的任何子控件具有焦点,则该"窗口"被认为是活动的.
现在,IsFocused属性似乎没有级联,这意味着如果子控件具有焦点,它的容器也不会设置为"聚焦",因此我们无法使用它.出于同样的原因,我们无法在容器上设置IsFocused属性,因为我相信它会从孩子那里偷走它.
我唯一的想法是创建一个名为HasChildWithFocus的新DP或类似的东西,然后在代码隐藏中,监听冒泡事件并设置该标志.不确定这是最好的方式.(我们可以将它作为附加属性/附加行为的组合来实现.)
但当然,如果我们可以简单地问一个控件'嘿......你或你的孩子有焦点吗?'会好得多.
你也可以吗?
Ric*_*key 10
您可以UIElement.IsKeyboardFocusWithin
像这样直接使用:
<Grid>
<Grid.Resources>
<Style x:Key="panelStyle" TargetType="Border">
<Setter Property="BorderBrush" Value="PaleGoldenrod"/>
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="BorderBrush" Value="PaleGreen"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<UniformGrid Columns="2">
<Border BorderThickness="10" Style="{StaticResource panelStyle}">
<StackPanel>
<TextBox Text="TextBox1"/>
<TextBox Text="TextBox2"/>
</StackPanel>
</Border>
<Border BorderThickness="10" Style="{StaticResource panelStyle}">
<StackPanel>
<TextBox Text="TextBox3"/>
<TextBox Text="TextBox4"/>
</StackPanel>
</Border>
</UniformGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)
在此示例中,包含具有键盘焦点的元素的边框使用不同的边框画笔进行样式设置.
归档时间: |
|
查看次数: |
1586 次 |
最近记录: |