2016-10-28 5 views
1

My global(App.xaml)ControlTemplate Buttonは、Foregroundプロパティをデフォルトの黒色からオーバーライドしたくありません。これは比較的一般的な問題だと思われますが、私はBasedOnnullに設定して、described in this questionとするなどさまざまな解決策を試しました。WPF Button ControlTemplateは継承されません。

私のコードは以下の通りです。GridContentPresenterの両方にフォアグラウンドカラーを明示的に指定しようとしました。しかし、色は黒のままです。スヌープはデフォルトから継承していると伝えていますが、どこから言われていないようですが、TextElement.Foregroundが正しい色に設定されているとしてContentPresenterという親を示しています。

このコードには設定する必要がありますか?私は要素や不動産を見逃したのですか?

<Style TargetType="Button"> 
    <Setter Property="SnapsToDevicePixels" Value="true" /> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid x:Name="grid" TextBlock.Foreground="#FFD3D3D2"> 
        <Border x:Name="border" Background="Transparent" BorderBrush="#FF5C7999" BorderThickness="2" CornerRadius="{Binding RelativeSource={RelativeSource TemplatedParent},Path=ActualHeight,Converter={StaticResource HalfConverter}}" Padding="10"> 
         <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0" TextBlock.Foreground="#FFD3D3D2"> 
         </ContentPresenter> 
        </Border> 
       </Grid> 
... 
+1

あなたが持っているものに基づいて問題を再現することはできません。ボタンはどのコンテキストに表示されますか?あなたは 'Content'に何を使っていますか? –

+0

実際、私はそれを再現できます: ''私は黒い「Foo」を取得します。 –

+0

'Label'コンテンツに適用される' ControlTemplate.Resources'に 'Label'の暗黙の' Style'を置くことができます。 –

答えて

1

このスタイルを使用したボタンは、テキスト以外のものにその内容を設定、または明示的にスタイルレスTextBlock内部を追加し、これは元のコードでForeground属性によって設定されたものをオーバーライドしてたことが判明しました。

テキストがボタンの内容として設定されていること、またはそのラッパーが適切にスタイルされていることを確認して、問題を修正しました。

結局ラバーダックのデバッグがうまくいくようです。

1

テストこれ、あなたがたが、Button.Contentが文字列であれば期待通りごStyle作品ではない、それはコントロールの場合:

<StackPanel> 
    <Button Content="Gray Text As Specified in the ControlTemplate" /> 
    <Button><Label>Default Black Text</Label></Button> 
</StackPanel> 

私はLabelさんForeground上書きされますControlTemplate.Resourcesに暗黙のLabelスタイルを追加することができ、誰かがそこに置くことができるすべての可能なコントロールのために局所暗黙のスタイルを持つことを試みるのはばかげているでしょう。

ただし、Contentのプレーンストリングを貼り付けるだけで動作します。今私はthe inheritance rules for attached propertiesを研究する時間を費やすつもりです。なぜなら、これは私がいつも望んでいた動作ではないという半自信の約51%だと思うからです。

+0

ありがとうございます。 "51%半自信"のためだけでなく、アップアップ。 – Dan

関連する問題