2012-01-23 39 views
1

私はWPFを初めて使用しているため、マウスオーバー時にButtonコントロールの子ContentControlのプロパティを変更する方法を見つけることができません。私のコードは次のようになります。親のマウスオーバー時に子コントロール(contentcontrol)プロパティを変更する

<Button x:Name="btnAddItem" Height="25" Width="25" Margin="5,0,0,0" 
     Style="{DynamicResource btnStyle}" ToolTip="Add Item"> 
    <ContentControl Content="ContentControl" Height="20" Width="20" 
      Template="{DynamicResource contentTemplate}" /> 
</Button> 

さて、ButtonMouseOverイベントで、私はButtonの大きさだけでなく、子供ContentControlのサイズを変更したいとき。 ContentControlには、実際にはButtonのベクトル画像が含まれています。助けてください。

+0

WPFでは、手動でコントロールのサイズを変更しない傾向があります。代わりに、コントロールをいくつかのコンテナ(つまり 'Grid')の中に入れ、コントロールの' Width'と 'Height'を指定しないことで、コンテナを満たすサイズにする必要があります。ダイナミックサイジングで達成しようとしていることをより明確にするには、より良い方法があるかもしれないので、それは役に立ちます。 –

+1

また、Buttonは既にContentControlであるため、別のものを埋め込む必要はありません。 Contentプロパティを設定するだけで済みます。 – GazTheDestroyer

+0

@SamuelSlade - グリッドと検索ボックスの中に複数のボタンがあり、クリックするボタンを強調表示するためにサイズを大きくしたい。その要件は、白以外のボタンの背景を強調表示するために他の色を使用することはできません。また、グリッドの背景には、白色と明るい灰色のグラデーションがあり、区別が難しくなります。ですから、強調表示されたボタンを区別するためにコンテンツのサイズを大きくしたいと思います。しかし、私はあなたのアドバイスを使用して、ボタンコントロールの全領域を占めるようにして、コンテンツのサイズを増やしました。ありがとう。 –

答えて

1

あなたのButtonは自動的に内容のサイズに合わせて伸びますので、HeightWidthのプロパティを削除してください。 Buttonの端とContentControlの間のスペースを維持する場合は、ContentControlのMarginプロパティを使用します。その後

、マウスが上にあるときにHeight/Widthを変更するには、ContentControlにのStyleDataTriggerを使用しています。 <ContentControl>タグではなく、自分のスタイルでHeight/Widthに設定してください。タグに設定すると、トリガーされた値よりも優先されるため変更されません。

<Style x:Key="MyContentControlStyle" TargetType="{x:Type ContentControl}"> 
    <Setter Property="Height" Value="20" /> 
    <Setter Property="Width" Value="20" /> 
    <Setter Property="Margin" Value="5" /> 
    <Setter Property="Content" Value="ContentControl" /> 
    <Setter Property="Template" Value="{DynamicResource contentTemplate}" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding ElementName=btnAddItem, Path=IsMouseOver}" Value="True"> 
      <Setter Property="Height" Value="20" /> 
      <Setter Property="Width" Value="20" /> 
     </DataTrigger > 
    </Style.Triggers> 
</Style> 


<Button x:Name="btnAddItem" Height="25" Width="25" Margin="5,0,0,0" 
     Style="{DynamicResource btnStyle}" ToolTip="Add Item"> 
    <ContentControl Style="{StaticResource MyContentControlStyle}" /> 
</Button> 
+0

美しいアドバイスをありがとう。あなたのコード例を使用してボタンの別々のベクトルイメージを使用しているので、ボタンのテンプレートとスタイルの両方を別々に設定するので、スタイルでテンプレートプロパティを設定することはできません。そして、私はcontentcontrolにマージンを使う考えが好きでした。それは美しく働いた。しかし、私が直面した問題は、使用したベクトル画像がすべてのスペースを埋めるのではなく、円のように空いていることでした。それで、画像の部分にカーソルを置いたときにのみ機能します。私が中空部分の中にいるとき、それは動作を停止する。 –

+0

@ ShaktiSingh代わりに 'DataTrigger'を使用して、ボタンの' IsMouseOver'プロパティのトリガーをオフにします。コードを更新します。 – Rachel

0

私が欲しかったことを達成するために、私はレイチェルのアドバイスとサミュエル・スラードを使用しました。私はそれをこのようなものでした:

<Button x:Name="btnEditItem" Style="{DynamicResource btnStyle}" Margin="5,0,0,0" ToolTip="Edit Item" Click="btnEditItem_Click"> 
<ContentControl x:Uid="ContentControl_5" Content="ContentControl" Template=" {DynamicResource contentTemplate}" Margin="2.5"/> 
</Button> 

をそして私はセッタープロパティを使用してbtnStyleを通じてボタンの高さと幅を設定し、トリガによってボタンの高さと幅を変更します。

これは完全に機能しています。私はあなたの助力の提案を感謝します。私は子供のコントロールのプロパティの別のルートを考えていたので、私はこの結論に達している可能性があるかどうかはわかりません。再度、感謝します。

関連する問題