2013-05-16 63 views
3

我想爲我的應用程序中的所有上下文菜單創建樣式。這種風格將允許我爲我的上下文菜單添加標題/標題。我使用的是現在的風格是如下將標題/標題添加到上下文菜單

<Style x:Uid="someStyle" TargetType="{x:Type ContextMenu}"> 
    <Setter x:Uid="Setter_240" Property="Background" Value="{DynamicResource someBrush}" /> 
    <Setter x:Uid="Setter_241" Property="BorderBrush" Value="{DynamicResource someBorderBrush}" /> 
    <Setter x:Uid="Setter_242" Property="SnapsToDevicePixels" Value="True" /> 
    <Setter x:Uid="Setter_243" Property="Template"> 
     <Setter.Value> 
      <ControlTemplate x:Uid="ControlTemplate_30" TargetType="{x:Type ContextMenu}"> 
       <Grid x:Uid="Grid_27"> 
        <Border x:Uid="Border_25" Margin="1" x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" /> 
        <StackPanel x:Uid="StackPanel_4" Background="{TemplateBinding Background}" IsItemsHost="True" ClipToBounds="True" Orientation="Vertical" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger x:Uid="Trigger_76" Property="IsEnabled" Value="False"> 
         <Setter x:Uid="Setter_244" Property="Background" Value="{DynamicResource someBrush}" TargetName="Border" /> 
         <Setter x:Uid="Setter_245" Property="BorderBrush" Value="{DynamicResource someBrush}" TargetName="Border" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

這種風格的工作對我蠻好,但沒有添加頁眉/標題的能力。我最初的想法是在這裏舉行的僞標籤

​​

我希望我可以用這個標籤的綁定頁眉/標題所有的上下文菜單。我遇到的問題是我不知道如何使這個標籤是可綁定的,以便每個上下文菜單可以有不同的標題/標題。這個解決方案也必須儘可能地自包含。我不想讓每個使用上下文菜單的人都必須添加多行來啓用這個功能,也就是說,我希望頭部是可選的,而不是每個菜單上的要求,所以如果有觸發器或某些東西這可能會隱藏標題,如果它沒有設置

什麼是最好/最乾淨的方式來實現這一目標,並儘可能使其可重用?

回答

1
在你的風格

只是涓滴的結合:

<Grid x:Uid="Grid_27" DataContext={Binding}> 
      <Border .../> 
      <Label Content="{Binding MenuTitle}" 
        Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibility}}"/> 
      ...the rest of your style... 
     </Grid> 
在使用

,提供數據方面:

<MenuItem DataContext="{Binding SomeViewModel.Menu1}" 
     Style={StaticResource yourstyle}> 
    ... 

其中菜單1是與具有「MenuTitle」和「可見性」類型屬性屬性

+0

如果未設置datacontext會發生什麼情況?有沒有不需要IsVisible值的解決方案?觸發器是否可以告訴MenuTitle是否爲空或空,並且不顯示標題? –

+0

我相信如果你的datacontext沒有設置,你會在你的輸出窗口中得到錯誤/警告。如果IsVisible是一個bool,那麼你不必設置它,默認情況下它是「false」。如果你不想提供綁定,你可以在你的樣式中通過setter提供默認值,那樣樣式的屬性只會通過觸發器改變。所以基本上,是的,綁定不是必需的。如果你沒有提供它,控件就不會顯示任何東西(除非設置了默認值) –

+0

嗨,我用一些你的信息和其他一些研究來提出一個合適的解決方案。最後,我決定在我們的樣式庫中創建第二個上下文菜單,用戶必須通過'Style = {StaticResource yourstyle}'指定他們想要使用的樣式。更改現有上下文樣式會導致其他地方的現有上下文菜單出現問題。謝謝 –