2012-02-13 12 views
0

私はを使用して、私のウィンドウのすべてのButtonコントロールの目のキャンディーの外観を作成しました。うまくいきました。それがさらに再利用可能なようにするにUserControl内のパラメータ化されたスタイル?

、私は、ユーザーコントロール内のすべてを入れてみました:私はのImageButton UCを作成し、その後、私は<Window.Resources>から<UserControl.Resources>にすべてのこと<Style>をカプセル化。

<Button Tag="Face.jpg" Content="Foo" />

は、それから私はから、XAMLで私のButtonインスタンスを変更

<uc:ImageButton Tag="Face.jpg" Content="Foo" />

とスタイルが適用されて停止しました。私は何をしないのです

<UserControl x:Class="GDTI.UI.Main.View.UserControls.ImageButton" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 

<UserControl.Resources> 
    <Style TargetType="Button"> 
     <Setter Property="MaxWidth" Value="250" /> 
     <Setter Property="Margin" Value="5" /> 
     <Setter Property="FontWeight" Value="Bold" /> 
     <Setter Property="Foreground" Value="White" /> 

     <Setter Property="Background" > 
      <Setter.Value> 
       <SolidColorBrush Color="Orange" Opacity="0.4" /> 
      </Setter.Value> 
     </Setter> 

     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate > 
        <StackPanel> 
         <Image Source="{Binding Tag, 
          RelativeSource={RelativeSource 
               FindAncestor, 
               AncestorType='Button'}}" /> 
         <TextBlock Margin="10" 
      HorizontalAlignment="Center" 
      Text="{Binding Content, 
        RelativeSource={RelativeSource 
             FindAncestor, 
             AncestorType='Button'}}" /> 
        </StackPanel> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</UserControl.Resources> 

<Button/> 

ここUCコードがですか?

ありがとうございました!

+0

Gaaahhh!あなたはカスタムのユーザコントロールを持っていて、 'Tag'プロパティを使いますか? (あなたが投稿していないコードに問題がどこにあるのかも分かりません) –

+0

次のステップは 'Tag'プロパティを避けることでした。なぜ私はUCを使うのでしょうか?今すぐコードを投稿してください –

答えて

0

プロパティは設定されていないボタン上のボタンスタイルのターゲットプロパティのバインディング。あなたは、スタイルの整合性を保持する場合UserControlにそれらを転送する必要があります。

CaptionImageSourceは(コードビハインドで)ユーザーコントロールに定義された新しい dependency propertiesでなければなりません
<!-- Inside UserControl declaration --> 
<Button Content="{Binding Caption, RelativeSource={RelativeSource AncestorType=UserControl}}" 
     Tag="{Binding ImageSource, RelativeSource={RelativeSource AncestorType=UserControl}}"/> 

。ここButtonあなたがUserControl(したがってCaptionプロパティ)にContentに特異的に結合することはできません

注意、自身UserControlContentです。

また、AncestorTypeUserControlに変更してButtonをバイパスすることで、スタイルのターゲティングを直接変更することもできます。テンプレート化されたコントロールを超えたバインディングは、まったく良い習慣ではありませんが、あなたはまだUserControlの中にいますので、許されるかもしれません。

いずれにしてもこれはちょっとハッキーで、代わりにButtonから継承する方が良いかもしれません。

+0

ありがとうあなたの解決策は働いているようです。 –

+0

@ silentman.it:それを聞いてうれしいです。これで十分にあなたの質問に答えるなら、あなたは答えを受け入れることができます(http://meta.stackexchange.com/questions/5234/)。 –

関連する問題