2011-08-03 7 views
1

私はwinフォームアプリケーションでいくつかのWPFページを構築しています。私は自分のアプリケーションにWPFテーマを使用したい。 (プロジェクトがWPFフォームを表示するWPF ElementHostとWinフォームプロジェクトであるため)App.xamlを持っていない私は、このように私のフォームでの私のテーマリソースディクショナリを追加しました:WPFで他のリソースclobbersテーマを定義する

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Themes/ExpressionDark.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

これは、このフォーム上のすべてのコントロールのために働きますその他のWPFユーザーコントロールのいくつかがありますが、テーマが機能していないユーザーコントロールがあります。リソースが配置またはリソースに何される場所は関係していないよう

<Grid.Resources> 
     <Style TargetType="ComboBox"> 
      <Setter Property="Margin" Value="0 2 5 2" /> 
     </Style> 
    </Grid.Resources> 

:私はこのように自分のリソースを定義し、影響を受けるコントロールすることを突き止めています。リソースにキーが設定されていないものは、スタイルのターゲットとなるすべてのテーマをブロックします。

<Style TargetType="{x:Type ComboBox}"> 
    <Setter Property="Foreground" Value="{DynamicResource TextBrush}" /> 
    <Setter Property="SnapsToDevicePixels" Value="true" /> 
    <Setter Property="Template" Value="{DynamicResource ComboBoxTemplate}" /> 
</Style> 

そして、このように見えるように自分のスタイルを変更する:私も辞書でリソースを見つけることによって、アウトスマート、それはしようとした

<Grid.Resources> 
     <Style TargetType="ComboBox"> 
      <Setter Property="Foreground" Value="{DynamicResource TextBrush}" /> 
      <Setter Property="SnapsToDevicePixels" Value="true" /> 
      <Setter Property="Template" Value="{DynamicResource ComboBoxTemplate}" /> 
      <Setter Property="Margin" Value="0 2 5 2" /> 
     </Style> 
    </Grid.Resources> 

しかし、それは私のコンボボックスが完全に消失させました!

ターゲットコントロールを覆い、テーマをスローしないリソースを追加する方法はありますか?

+0

@Dave Clemmer:あなたがユーザーコントロールにリソースを移動する場合

しかし、あなたがして、適切に暗黙的なスタイルを行うことができますあまり具体的でないスタイルのもの?それは本当に悪い考えですね! –

+0

wpf-stylesでは事実上何も出てこないので、より多くの人がこの投稿を見つけることができるように、私はスタイルとして再タグ付けしました。私はwpf-タグが落胆していると言われてきました。いずれにしても、タグの説明にはこれを反映する必要があります。興味深いもの: –

+0

その問題は、人々があなたに従うタグを選択するときにwpfとスタイルを言うことができないので、ウェブ、アンドロイド、デルファイなどが得られるかもしれないが、私はルールを作ることはできないと思う。 –

答えて

2

あなただけの古い暗黙のStyleStyleBasedOnプロパティを設定する必要があります。

<Grid.Resources> 
    <Style x:Key="ComboBoxStyle" 
      TargetType="{x:Type ComboBox}" 
      BasedOn="{StaticResource {x:Type ComboBox}}"> 
     <Setter Property="Margin" Value="0 2 5 2" /> 
    </Style> 

</Grid.Resources> 

編集

だから、あなたはすべてのリソースキーを使用しない場合あなたのコンボボックスの、それをさらに一歩進める必要があります。 WPF/WinForms interopがなぜ暗黙のスタイルを扱うのか分かりませんが、暗黙的なスタイルをリソースに追加してBasedOn="{StaticResource ComboBoxStyle}"を設定しても、テンプレートは失われます。あなたがWPF-styles`に `より具体的なものから、タグを編集する理由、

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Themes/ExpressionDark.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 

     <Style x:Key="ComboBoxStyle" 
       TargetType="{x:Type ComboBox}" 
       BasedOn="{StaticResource {x:Type ComboBox}}"> 
      <Setter Property="Margin" Value="0 2 5 2" /> 
     </Style> 
    </ResourceDictionary> 
</UserControl.Resources> 

<Grid> 
    <Grid.Resources> 
     <Style TargetType="{x:Type ComboBox}" 
        BasedOn="{StaticResource ComboBoxStyle}" /> 
    </Grid.Resources> 
+0

I didnあなたがそれをすることができるのは分かりません! :) –

+0

その一方で....それは動作しませんでした! –

+0

何をしましたか? –

関連する問題