0

コードの重複を減らそうとしています。次の点を考慮してください。

<page...>
  <page.resources>
    <MenuItem x:Key="commonItem" />
  </page.resources>
  <TextBlock>
    <TextBlock.ContextMenu>
      <ContextMenu>
        <ContextMenu.Resources>
          <local:thingOne x:Key="one"/>
          <local:thingTwo x:Key="two"/>
        </ContextMenu.Resources>
        <StaticResourceExtension PropertyKey="commonItem"/>
        <StaticResourceExtension PropertyKey="commonItem"/>
      </ContextMenu>
    </TextBlock.ContextMenu>
  </TextBlock>
</page>

最初の commonItem インスタンスに「1」を渡し、2 番目に「2」を渡すにはどうすればよいですか?

上記の例を考えると、これを行うためのより良い方法があると思います。これは、XAML で実際に行われていることを大幅に縮小したバージョンです。

より一般的な問題は、アプリ全体に異なるコンテキスト メニューがあり、いくつかの類似したメニュー項目を共有している場合、適切な DRY 原則に従うにはどうすればよいかということです。

4

2 に答える 2

1

MenuItemまず、 に aを入れるべきではありませんResources。これは MenuItem の 1 つのインスタンスを作成するだけであり、これは であるためUIElement、ページの 1 つの場所でしか使用できません。

Style代わりに、ほとんどの MenuItem に共通のすべての設定を使用して、リソース内の MenuItemの を保持し、そのスタイルを項目に適用することができます。ヒント: x:Keyyour からを省略しStyleて だけを指定すると、allTargetTypeに適用されます。 MenuItems

<Page...>
    <Page.resources>
        <Style TargetType="MenuItem" >
            <Setter Property="Header" Value="{Binding}" />
            <Setter Property="Foreground" Value="Lime" />
        </Style>
    </Page.resources>
    <TextBlock>
        <TextBlock.ContextMenu>
            <ContextMenu>
                <ContextMenu.Resources>
                    <local:thingOne x:Key="one"/>
                    <local:thingTwo x:Key="two"/>
                </ContextMenu.Resources>
                <MenuItem DataContext="{StaticResource one}" />
                <MenuItem DataContext="{StaticResource two}" />
            </ContextMenu>
        </TextBlock.ContextMenu>
    </TextBlock>
</Page>
于 2013-06-15T21:47:12.017 に答える