2011-09-19 14 views
5

私はユーザーコントロールがあり、他のプロジェクトで使用したいと思います。プロパティに直接値を設定しても問題ありません:WPF UserControlでスタイルを適用する際の問題

<local:MyUserControl prop1="val1" prop2="val2"> 
    ... 
</local:MyUserControl> 

しかし、スタイルを適用することはできません。私は試しました:

<Window ...> 
    <Window.Resources> 
     <Style x:Key="MyUserControlStyle" TargetType="{x:Type local:MyUserControl}"> 
      <Setter Property="prop1" Value="val1"/> 
      <Setter Property="prop2" Value="val2"/> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <local:MyUserControl Style="{StaticResource ResourceKey=MyUserControlStyle}"> 
      ... 
     </local:MyUserControl> 
    </Grid> 
</Window> 

どこが間違っていましたか? - ありがとうございます

+0

こんにちは@Mario!私はそれを修正した。 -Thanks – Mimi

+0

エラーが表示されますか、またはあなたのスタイルが適用されていませんか? –

+0

@Dan私のユーザーコントロールは、子供の必要な面にアニメーションの矢印付きのボタンを表示するスクロールビューアです。スタイルを適用すると、矢印ボタンが消えます。 (私は就任時にも実行時にもエラーを受け取りません) – Mimi

答えて

5

親愛なる@Mario Vernariの説明を使用して、問題が私のUserControlを作成するために使用した悪い戦略によるものであることがわかりました。私はいくつかの他のものを保持することができるUserControlを作成したい。だから私はこれを試してみました:DP1はタイプBrushの依存関係プロパティです

<UserControl x:Class="MyNamespace.MyUserControl" 
      ... 
      Style="{DynamicResource ResourceKey=MyUserControlStyle}"> 
    <UserControl.Resources> 
     ... 
     <Style x:Key="MyUserControlStyle" TargetType="{x:Type UserControl}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type UserControl}"> 
         <Border BorderBrush="{Binding Path=DP1}"> 
          ... 
          <ContentPresenter ... Content="{TemplateBinding Content}"/> 
          ... 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </UserControl.Resources> 
</UserControl> 

。この方法で作成されたUserControlは、そのプロパティ(たとえばDP1など)を直接設定すると機能します。

あなたは、ユーザーコントロールを使用する場合、それはあなたがすでにはそのレイアウトを知っていることを意味し、さらにコントロールのスタイルを設定する必要はありません...:もちろんこれは@Marioが私に言ったとして真の方法ではありません。あなたが同時に 2回そのスタイルを定義しているので、衝突をもたらし...

そして、彼は加えた:

を代わりに、あなたはCustomControlを使用する必要があります。 テーマフォルダのデフォルトのスタイルを定義します(通常のVisual Studioを所有している場合は自動的に作成されます)。その後、を自分のアプリのデフォルトスタイルに上書きすることができます。同じように、通常の基本クラスとその派生クラスに対して行うことになります。

はこれをフォロー: http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...

は明らかに、このケースでは、我々はContentControlクラス(代わりのControlクラス)から、当社のlookless制御を導出する必要があります。詳細をマスターするには、this & thisをご覧ください。

ここで、再び@Marioに感謝します。 ;)

0

あなたはStyle="{StaticResource ResourceKey=MyUserControlStyle}"を与えています。

ちょうど - Style="{StaticResource MyUserControlStyle}"です。

+0

私が期待したように、これはそれに影響を与えませんでした。 – Mimi

+3

@ Varun:後者のサンプルは最初のサンプルの略語です。 'ResourceKey'は' StaticResource'マークアップ拡張のデフォルトプロパティであるため、あなたは*名前を付けることはできません。 –