Триггеру событий WPF не удается найти имя источника при нажатии на элемент меню - PullRequest
0 голосов
/ 10 июля 2011

В моем TreeView HierarchicalDataTemplate я хочу позволить пользователю иметь возможность переименовывать элементы дерева. Для этого я реализовал TextBox, который является ReadOnly. Когда пользователь щелкает правой кнопкой мыши элемент и выбирает «Переименовать», для свойства ReadOnly в TextBox этого элемента должно быть установлено значение False, что позволяет пользователю переименовывать элемент.

Проблема, с которой я сталкиваюсь, заключается в том, что Visual Studio выдает ошибку при нажатии на пункт «Переименовать» MenuItem. Это ошибка, которую я получаю:

"Имя 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 голосов
/ 10 июля 2011

Попробуйте установить Storyboard.Target , используя x: Reference .Вы также должны взглянуть на библиотеку Interactivity , которая поставляется с Blend SDK.Это может помочь вам изменить свойства более четко без использования анимации.

...