ContentControl在GotFocus上更改ContentTemplate

时间:2012-01-12 08:47:24

标签: wpf user-controls wpf-controls

我有一个包含ContentControl的UserControl。当用户点击此ContentControl时,我想更改其ContentTemplate,使其“可编辑”(而不是标签显示文本框)。  我有这个:

<StackPanel>
    <ContentControl Style="{DynamicResource ContainerStyleEditable}" GotFocus="ContentControl_GotFocus"></ContentControl>
</StackPanel>

在userControl资源中我有

<Style TargetType="{x:Type ContentControl}" x:Key="ContainerStyleEditable">
    <Setter Property="ContentTemplate" Value="{DynamicResource ItemTemplateReadOnly}" />
    <Style.Triggers>
        <Trigger Property="IsFocused" Value="True">
            <Setter Property="ContentTemplate" Value="{DynamicResource ItemTemplateEditable}" />
        </Trigger>
    </Style.Triggers>
</Style>

这个doe不起作用,似乎GotFocus事件永远不会发生。这是怎么回事?

1 个答案:

答案 0 :(得分:3)

我通常将IsKeyboardFocusWithin而不是IsFocused的触发器作为基础,因为通常焦点元素通常不是实际的ContentControl,而是它内部的控件Content

此外,请确保ContentControl中的至少一个控件可以接受焦点,以便控件可以获得焦点。如果控件内部没有任何东西可以接受焦点,则触发器永远不会触发。