2012-01-23 52 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> 

現在,當MouseOver事件Button的,我想改變Button的大小以及孩子ContentControl的大小。 ContentControl實際上包含Button的矢量圖像。請幫忙。

+0

在WPF中,您往往不會手動重新調整控件的大小。相反,將控件放在某個容器(即'Grid')內,並且不指定控件的'Width'和'Height',它應該調整大小以填充容器。如果您更清楚地定義您嘗試通過動態調整大小實現的目標,可能會有更好的方法來實現。 –

+1

另外Button已經是一個ContentControl,所以你不需要嵌入另一個。您可以設置其內容屬性。 – GazTheDestroyer

+0

@SamuelSlade - 網格內有多個按鈕和一個搜索框,我想增加大小以突出顯示要點擊的按鈕。要求是這樣的,我不能使用任何其他顏色來突出顯示按鈕背景,除非是白色,並且我的網格背景具有白色和淺灰色漸變,這使得難以區分。所以,我想增加內容的大小來區分突出顯示的按鈕。但是我用你的建議來增加內容的大小,讓它佔據按鈕控件的全部區域。謝謝。 –

回答

1

你的Button會自動拉伸以適應其內容的大小,所以擺脫它的HeightWidth屬性。如果要保持Button邊緣和ContentControl之間的空間,請使用ContentControl的Margin屬性。

然後,使用DataTrigger在ContentControl中的Style改變Height/Width當鼠標移動到它。請務必按照您的樣式設置Height/Width而不是<ContentControl>標籤,因爲如果您將其設置在標籤中,它將優先於觸發值,因此永遠不會更改。

<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

感謝您的美麗建議。我使用你的代碼示例來爲按鈕單獨設置模板和樣式,因爲我使用不同的矢量圖像作爲按鈕,所以無法在樣式中設置模板屬性。我喜歡利用邊緣進行內容控制的想法。它工作得很好。但是我面臨的問題是我使用的矢量圖像並沒有填滿所有的空間,而是像一個圓圈一樣空洞。所以,只有當我將鼠標懸停在圖像的某個部分上時纔有效。當我在空心部分內時,它停止工作。 –

+0

@ShaktiSingh改爲使用'DataTrigger'將按鈕的'IsMouseOver'屬性的Trigger關閉。我會更新我的代碼。 – 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> 

而且我通過setter屬性設置爲通過btnStyle高度和按鈕的寬度,並通過觸發器更改按鈕的高度和寬度。

這讓我完美地工作。我感謝您的所有幫助建議。我不確定我是否能夠得出這個結論,因爲我正在考慮採取不同的兒童控制權財產路線。再次感謝。

相關問題