【发布时间】:2016-07-26 13:54:12
【问题描述】:
我想创建一个 UserControl(在这种情况下是一个带有已定义背景颜色的方形按钮),它可以托管它自己的内容。
用户控制:
<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 的整个内容(整个按钮模板)。我猜这是因为 UserControl 中的按钮本身被定义为“内容”,并且在定义新内容时会被覆盖。
所以最后一个问题是:是否有可能实现我想要的?如果是:如何?如何将我在 MainView 中定义的内容“重定向”到按钮模板内的自定义 ContentPresenter 而不是 UserControls 的 ContentPresenter?
如果可能,我不想创建一个新的 dp-propery 来托管我的内容,例如:
<controls:MordernButton Size="200" BackgroundColor="Light">
<controls:ModernButton.Content>
I don't want this, if possible
</controls:ModernButton.Content>
</controls:ModernButton>
【问题讨论】:
-
你的意思是你不想为此创建新的dp?
-
正确 - 如果可能的话,当然。
-
@Chill-X 请参阅下面的答案。如果您遇到任何问题,请告诉我。
标签: c# wpf xaml user-controls contentpresenter