Ere*_*rez 51 wpf user-controls
我正在尝试创建一个Grid
包含两行的用户控件.标题的第一行和第二行的内容将在用户控件之外定义,例如Button
在我们的示例中.
不知何故,我没有让它工作.
UserControl1 xaml:
<Grid Background="LightBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Title" FontSize="30" Margin="10,0,0,0"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
MainWindow xaml:
<Grid>
<local:UserControl1>
<Button>Click me</Button>
</local:UserControl1>
</Grid>
Run Code Online (Sandbox Code Playgroud)
下面的图片应该解释我的问题:
EvA*_*lex 64
以下代码
<local:UserControl1>
<Button>Click me</Button>
</local:UserControl1>
Run Code Online (Sandbox Code Playgroud)
表示您将UserControl1
Content属性设置为该按钮.这个按钮只是替换了那个UserControls1
标记.所以你在UserControl1.xaml中拥有的所有东西都不再存在了.
编辑
如果您希望UserControl托管一些将在其外部设置的标记,您可以添加一个标记,DependencyProperty
例如:
/// <summary>
/// Gets or sets additional content for the UserControl
/// </summary>
public object AdditionalContent
{
get { return (object)GetValue(AdditionalContentProperty); }
set { SetValue(AdditionalContentProperty, value); }
}
public static readonly DependencyProperty AdditionalContentProperty =
DependencyProperty.Register("AdditionalContent", typeof(object), typeof(UserControl1),
new PropertyMetadata(null));
Run Code Online (Sandbox Code Playgroud)
并在其标记中添加一些元素以托管其他内容.这是扩展您提供的标记的示例:
<UserControl ... Name="userControl">
<Grid Background="LightBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Title" FontSize="30" Margin="10,0,0,0"/>
<ContentPresenter Content="{Binding AdditionalContent, ElementName=userControl}" />
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
现在您可以使用它如下:
<local:UserControl1>
<local:UserControl1.AdditionalContent>
<Button>Click me</Button>
</local:UserControl1.AdditionalContent>
</local:UserControl1>
Run Code Online (Sandbox Code Playgroud)
bli*_*eis 24
你必须设置ControlTemplate
:
<UserControl>
<UserControl.Resources>
<Style TargetType="{x:Type local:UserControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:UserControl1}">
<Grid Background="LightBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Title" FontSize="30" Margin="10,0,0,0"/>
<ContentPresenter Grid.Row="1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
使用模板
<ContentControl />
而不是使用Content Presenter
所以放置这个:
<UserControl.Style>
<Style TargetType="{x:Type UserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UserControl}" >
<Grid Background="LightBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Title" FontSize="30" Margin="10,0,0,0"/>
<ContentControl Grid.Row="1" Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Style>
Run Code Online (Sandbox Code Playgroud)
到你的userControl
您可以模板化用户控件以添加其他视觉效果,例如TextBlock
.
<UserControl>
<UserControl.Style>
<Style TargetType="{x:Type UserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Background="LightBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Title" FontSize="30" Margin="10,0,0,0"/>
<ContentPresenter Grid.Row="1" Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Style>
<Button>
Click me!
</Button>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32648 次 |
最近记录: |