WPF用户控件(UserControl)中能否实现追加控件或Content?

Shawlj 2017-09-10 08:24:08
问题描述,网上很少有关于WPF的资料,我想的知道WPF用户控件在其他程序总引用的时候能否在不覆盖原控件内的元素控件外,添加控件,下面是我实现的用户控件代码

用户控件源码:
<UserControl x:Class="Angma.Framework.Custom.Controls.Control.GeneralFormControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="1366">

<!--引入资源样式文件-->
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Styles/ControlStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

<!--自定义弹出窗体框架-->
<Border BorderBrush="White" CornerRadius="0" BorderThickness="1,1,1,0">
<DockPanel>
<Grid DockPanel.Dock="Top" Background="LightBlue">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="55"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Image Width="35" HorizontalAlignment="Right" Source="pack://application:,,,/Angma.Framework.Custom.Controls;component/Resource/Image/form_title.png"/>
<Label Grid.Column="1" x:Name="label_title" Content="用户控件窗体标题" HorizontalAlignment="Left"/>
<Button Grid.Column="2" x:Name="btn_back" Click="btn_back_Click" ToolTip="返回" BorderThickness="0" Background="LightBlue" Width="Auto">
<Rectangle Width="45" Height="50" VerticalAlignment="Center">
<Rectangle.Fill>
<ImageBrush ImageSource="pack://application:,,,/Angma.Framework.Custom.Controls;component/Resource/Image/back_btn.png" Stretch="Fill"/>
</Rectangle.Fill>
</Rectangle>
</Button>
</Grid>

<!--表单详细内容-->
<Border x:Name="border_conent" DockPanel.Dock="Bottom"></Border>
</DockPanel>
</Border>
</UserControl>


这是引用上面的控件方式
<Angma:GeneralFormControl Title="生产任务列表" BackClick="GeneralFormControl_BackClick" IsHidden="True" DockPanel.Dock="Top">
<!-- 这是用户要增加的内容,目前这样写肯定会覆盖原控件的控件,我想的是将Grid的元素加到上面的Border里面 -->
<Grid>
</Grid>
</Angma:GeneralFormControl>
...全文
1304 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawlj 2017-09-11
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
2中方式: 1:增加一个依赖项属性,表示内容的依赖项属性,因为Border的Child属性为UIElement,也就是任何继承自UIElement的控件都能作为它的内容。具体msdn。 2:编写一个统一的UserControl的样式,也就是修改它的Template,内容为你定义的“自定义弹出窗体框架” 不过其中的border的内容要使用类似:
<AdornerDecorator>
                                <ContentPresenter Content="{Binding Content}" />
                            </AdornerDecorator>
这样的方式来进行内容定义。这样在引用的时候 直接定义在usercontrol中定义要显示的内容,就像你最后“这是引用上面的控件方式” 叙述的那样。
原来还有装饰器这一说法,我去试试。
exception92 2017-09-11
  • 打赏
  • 举报
回复
2中方式: 1:增加一个依赖项属性,表示内容的依赖项属性,因为Border的Child属性为UIElement,也就是任何继承自UIElement的控件都能作为它的内容。具体msdn。 2:编写一个统一的UserControl的样式,也就是修改它的Template,内容为你定义的“自定义弹出窗体框架” 不过其中的border的内容要使用类似:
<AdornerDecorator>
                                <ContentPresenter Content="{Binding Content}" />
                            </AdornerDecorator>
这样的方式来进行内容定义。这样在引用的时候 直接定义在usercontrol中定义要显示的内容,就像你最后“这是引用上面的控件方式” 叙述的那样。

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧