2015-10-19 243 views
1

標題看起來比首先想到的更容易,但我有一個綁定到項目列表的上下文菜單。我希望能夠顯示上下文菜單的標題來訪問列表。目前它只顯示爲空白,然後允許我查看列表,但是我需要它顯示標題「添加現有屬性」。此外,如果有人可以幫助我與我的形象問題,將不勝感激:)。相反,具有圖像名稱的第一個我想要的顯示名稱「添加現有屬性」上下文菜單的名稱標題

<DataTemplate x:Key="AddNodeTemplate"> 
     <Border BorderThickness="1" Background="#F7F7F7"> 
      <Border.BorderBrush> 
       <DrawingBrush Viewport="8,8,8,8" ViewportUnits="Absolute" TileMode="Tile"> 
        <DrawingBrush.Drawing> 
         <DrawingGroup> 
          <GeometryDrawing Brush="#F7F7F7"> 
           <GeometryDrawing.Geometry> 
            <GeometryGroup> 
             <RectangleGeometry Rect="0,0,50,50"/> 
             <RectangleGeometry Rect="50,50,50,50"/> 
            </GeometryGroup> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
         </DrawingGroup> 
        </DrawingBrush.Drawing> 
       </DrawingBrush> 
      </Border.BorderBrush> 
      <StackPanel> 
       <Button x:Name="ButtonAdd" Click="ButtonAdd_Click" Height="30" Width="130"> 
        <Button.Style> 
         <Style TargetType="Button"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="Button"> 
             <Grid Background="#F7F7F7"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="25"/> 
               <ColumnDefinition/> 
              </Grid.ColumnDefinitions> 
              <Image Source="Images/icon_plus.bmp" HorizontalAlignment="Left" Margin="5,0,0,0"/> 
              <TextBlock Text="Add Property" HorizontalAlignment="Center" Grid.Column="1" VerticalAlignment="Center" Foreground="LightGray" FontStyle="Italic" FontSize="12"/> 
             </Grid> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="Background" Value="#F7F7F7"/> 
         </Style> 
        </Button.Style> 
        <Button.ContextMenu> 
         <ContextMenu> 
          <MenuItem Header="Add Exisiting Properties" ItemsSource="{Binding Path=AvailableProperties}"> 
            <MenuItem.Resources> 
             <Style TargetType="MenuItem"> 
              <Setter Property="HeaderTemplate"> 
               <Setter.Value> 
                <DataTemplate> 
                 <StackPanel Orientation="Horizontal">                 
                  <ContentPresenter Content="{Binding Name}" /> 
                 </StackPanel> 
                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             <Setter Property="Icon"> 
              <Setter.Value> 
               <DataTemplate> 
                <StackPanel> 
                 <Image Width="12" Height="12" Source="{Binding Icon, Converter={StaticResource ImageToSourceConverter}}" Margin="3" VerticalAlignment="Center"/> 
                </StackPanel> 
               </DataTemplate> 
              </Setter.Value> 
             </Setter> 
            </Style> 
            </MenuItem.Resources> 
          </MenuItem> 
          <MenuItem Header="Upscale well logs"/> 
          <MenuItem Header="Upscale well_top attributes"/> 
          <MenuItem Header="Upscale point attributes"/> 
          <MenuItem Header="Calculate"/> 
         </ContextMenu> 
        </Button.ContextMenu> 
       </Button> 
     </StackPanel> 
     </Border> 
    </DataTemplate> 

什麼是顯示

enter image description here

回答

2

這種風格<Style TargetType="MenuItem">其實適用於頂級菜單項(您hardcodedly設置其HeaderAdd Exisiting Properties的一個)。您需要使用Trigger根據Role屬性過濾掉。所有的子菜單項有SubMenuItemRole,所以它應該是這樣的:

<Style TargetType="MenuItem"> 
    <Style.Triggers> 
     <Trigger Property="Role" Value="SubMenuItem"> 
      <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
          <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <ContentPresenter Content="{Binding Name}"/> 
          </StackPanel> 
          </DataTemplate> 
        </Setter.Value> 
      </Setter> 
     </Trigger> 
    </Style.Triggers> 
    <!-- ... --> 
</Style>   

編輯:關於圖標,您明確將其設置爲未渲染的DataTemplate,而是使用了字符串由ToString()返回(因此文本System.Windows.DataTemplate代替圖標)。你可以僅僅刪除DataTemplate這樣的:

<!-- define a non-shared resource of Image --> 
<Style TargetType="MenuItem"> 
    <Style.Resources> 
     <Image x:Key="img" x:Shared="False" Width="12" Height="12" Source="{Binding Icon, Converter={StaticResource ImageToSourceConverter}}" 
      Margin="3" VerticalAlignment="Center"/> 
    </Style.Resources> 
    <!-- ... --> 
</Style> 

<Setter Property="Icon" Value="{StaticResource img}"/> 

最終的解決方案:

<Style TargetType="MenuItem"> 
    <Style.Resources> 
     <Style TargetType="ContentPresenter"> 
       <Style.Triggers> 
        <Trigger Property="ContentSource" Value="Icon"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <Image Source="{Binding}"/> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
        </Trigger> 
       </Style.Triggers> 
     </Style> 
    </Style.Resources>  
    <Setter Property="Icon" Value="{Binding Icon, 
      Converter={StaticResource ImageToSourceConverter}}"/> 
    <!-- ... --> 
</Style>   
+0

謝謝你是完美的:),你知道如何解決我的圖像問題嗎? –

+0

@RyanArchibald看到我的編輯。 –

+0

謝謝,它已經工作,但僅用於我的上下文菜單列表中的最後一項,你知道爲什麼嗎? –

0

您可以使用 `

<MenuItem Header="Add Exisiting Properties" ItemsSource="{Binding Path=AvailableProperties}"> 
    <MenuItem.Resources> 
     <Style TargetType="MenuItem"> 
     <Setter Property="HeaderTemplate"> 
       <Setter.Value> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal">                 
<ContentPresenter Content="{TemplateBinding Header}" /> 
        </StackPanel> 
       </DataTemplate> 
       </Setter.Value> 
     </Setter> 

or

<MenuItem Header="Add Exisiting Properties" ItemsSource="{Binding Path=AvailableProperties}"> 
      <MenuItem.Resources> 
       <Style TargetType="MenuItem"> 
       <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
         <DataTemplate> 
         <StackPanel Orientation="Horizontal">                  
    <ContentPresenter Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Header}" /> 
         </StackPanel> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 

`

+0

你的第二個建議作出給我清空了他們:(,但是第一個,我得到一個錯誤只是現在頭部無法識別或無法訪問 –