2011-07-10 77 views
0

在我的TreeView HierarchicalDataTemplate中,我想讓用戶能夠重命名treeviewitems。對此,我實現了一個ReadOnly的TextBox。當用戶右鍵單擊一個項目並選擇「重命名」時,該項目的文本框中的屬性ReadOnly應設置爲False,從而允許用戶重命名該項目。當MenuItem被點擊時,WPF事件觸發器無法找到SourceName

我遇到的問題是,當我點擊'重命名'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> 

回答

0

嘗試使用x:Reference設置Storyboard.Target。您還應該查看Blend SDK附帶的Interactivity庫。它可以幫助您更清晰地更改屬性,而無需使用動畫。

+0

工作!謝謝一堆!我一定會檢查一下Interactivity庫。我一直渴望在Xaml中設置更清晰的屬性。 – Vakey