我想創建一個UserControl(在本例中是一個帶定義的Backgroundcolors的方形按鈕),它可以託管它自己的內容。如何在UserControl中使用ContentPresenter
用戶控件:
<UserControl x:Class="SGDB.UI.Controls.ModernButton"
xmlns:local="clr-namespace:SGDB.UI.Controls"
xmlns:converter="clr-namespace:SGDB.UI.Converter"
x:Name="_modernButton">
<Button>
<Button.Resources>
<converter:EnumToColorConverter x:Key="ColorConverter"/>
</Button.Resources>
<Button.Template>
<ControlTemplate>
<Border Width="{Binding Size, ElementName=_modernButton}" Height="{Binding Size, ElementName=_modernButton}" BorderBrush="Black" BorderThickness="0.8,0.8,3,3">
<Grid Background="{Binding BackgroundColor, ElementName=_modernButton, Converter={StaticResource ColorConverter}}">
<ContentPresenter/>
</Grid>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
現在,你可能會想到吧,如果我用我的MainView這裏面控制,直到我定義了一些內容寄託都工作得很好。
使用:
<control:ModernButton Size="200" BackgroundColor="Light">
TEST
</control:ModernButton>
在這種情況下「TEST」將覆蓋用戶控件(全按鍵模板)的全部內容。我猜這是因爲UserControl內部的按鈕被定義爲「內容」本身,並且在定義新內容時它將被覆蓋。
所以最後的問題是:是否有可能實現我在找的東西?如果是的話:如何?我如何將我在MainView中定義的內容「重定向到」我的按鈕模板中的自定義ContentPresenter而不是UserControls的ContentPresenter?
如果可能的話,我不希望創建一個新的DP-屬性格式它承載我的內容,例如:
<controls:MordernButton Size="200" BackgroundColor="Light">
<controls:ModernButton.Content>
I don't want this, if possible
</controls:ModernButton.Content>
</controls:ModernButton>
你是說你不想爲此創建新的dp? – Gopichandar
正確 - 如果可能的話,當然。 – C4p741nZ
@ Chill-X請參閱下面的答案。如果您遇到任何問題,請告訴我。 – Gopichandar