单击MenuItem时,WPF事件触发器无法找到SourceName

时间:2011-07-10 17:11:48

标签: wpf menuitem

在我的TreeView HierarchicalDataTemplate中,我想让用户能够重命名treeviewitems。为此,我实现了一个ReadOnly的TextBox。当用户右键单击某个项目并选择“重命名”时,该项目的TextBox中的属性ReadOnly应设置为False,允许用户重命名该项目。

我遇到的问题是当我点击'重命名'MenuItem时,Visual Studio会出错。这是我得到的错误:

“'txt'名称在'System.Windows.Controls.MenuItem'的名称范围内找不到。”

我的问题是,如何解决这个问题并实现目标?也许我应该以完全不同的方式解决这个问题???

谢谢,非常感谢任何帮助!

我的代码:

<HierarchicalDataTemplate DataType="{x:Type local:ResourceItemData}" ItemsSource="{Binding AnimationDataCollection}">
                        <TextBox x:Name="txt" Text="{Binding ResourceName}" FontSize="12" BorderThickness="0" IsReadOnly="True">
                            <TextBox.Style>
                                <Style>
                                    <Setter Property="TextBox.Background" Value="Transparent"/>
                                    <Style.Triggers>
                                        <Trigger Property="TextBox.IsFocused" Value="True">
                                            <Setter Property="TreeViewItem.IsSelected" Value="True" />
                                            <Setter Property="TextBox.Background" Value="AliceBlue" />
                                        </Trigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBox.Style>
                            <TextBox.ContextMenu>
                                <ContextMenu>
                                    <MenuItem Header="Add Animation" Click="AddAnimationMenuItem_Click"/>
                                    <MenuItem Header="Remove Resource" Click="RemoveResourceMenuItem_Click"/>
                                    <MenuItem Header="Rename">
                                        <MenuItem.Triggers>
                                            <EventTrigger RoutedEvent="MenuItem.Click">
                                                <BeginStoryboard>
                                                    <Storyboard>
                                                        <BooleanAnimationUsingKeyFrames Storyboard.TargetName="txt" Storyboard.TargetProperty="IsReadOnly">
                                                            <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True" />
                                                        </BooleanAnimationUsingKeyFrames>
                                                    </Storyboard>
                                                </BeginStoryboard>
                                            </EventTrigger>
                                        </MenuItem.Triggers>
                                    </MenuItem>
                                </ContextMenu>
                            </TextBox.ContextMenu>
                        </TextBox>
                    </HierarchicalDataTemplate>

1 个答案:

答案 0 :(得分:0)

尝试使用Storyboard.Target设置x:Reference。您还应该查看Blend SDK附带的Interactivity库。它可以帮助您在不使用动画的情况下更清晰地更改属性。