我可以通过创建一个简单的C#类来继承和增强ToolBar类,然后这样做:
public class NiceToolBar : ToolBar
{
private ToolBarTray mainToolBarTray;
public NiceToolBar()
{
mainToolBarTray = new ToolBarTray();
mainToolBarTray.IsLocked = true;
this.Background = new SolidColorBrush(Colors.LightGray);
...
但这迫使我操纵代码中的所有控件,如下所示:
ToolBar toolBar = new ToolBar();
toolBar.Background = new SolidColorBrush(Colors.Transparent);
toolBar.Cursor = Cursors.Hand;
StackPanel sp = new StackPanel();
sp.Orientation = Orientation.Horizontal;
TextBlock tb = new TextBlock();
tb.Text = label;
tb.Margin = new Thickness { Top = 3, Left = 3, Bottom = 3, Right = 10 };
Image image = new Image();
image.Source = new BitmapImage(new Uri("Images/computer.png", UriKind.Relative));
sp.Children.Add(image);
sp.Children.Add(tb);
toolBar.Items.Add(sp);
我真正需要的是 XAML 来执行这个繁琐的参数分配和布局。
所以我创建了一个新用户控件并更改后面的代码以继承ToolBar:
public partial class SmartToolBar : ToolBar
{
public SmartToolBar(string label)
{
InitializeComponent();
TheLabel.Text = label;
}
}
在我的XAML中,我把它放在了:
<UserControl x:Class="TestUserControl.Helpers.SmartToolBar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Orientation="Horizontal">
<Image Source="Images/computer.png"/>
<TextBlock x:Name="TheLabel"/>
</StackPanel>
</UserControl>
但是当我运行它时,我收到错误:
部分声明 “TestCallConstructor.Helpers.SmartToolBar” 可能没有定义不同的基础类
如何让我的用户控制 with XAML?
答案 0 :(得分:3)
如果您继承自UserControl
,则不会撰写ToolBar
,因为ToolBar
不会继承UserControl
。当您的C#指定UserControl
时,您的XAML将基类指定为ToolBar
。显然那里存在冲突。
我不明白你首先在代码背后做这些事情的前提。为什么不将ToolBar
的{{1}}绑定到您的项目集合,并使用通常的ItemsSource
属性来控制渲染?
答案 1 :(得分:3)
您正在寻找自定义控件(而不是UserControl)。编写自定义控件时,可以指定其默认视图(即XAML)。
您可以谷歌如何在WPF中创建自定义控件,但这里是我为您搜索的一个链接How to Create a WPF Custom Control。
希望这会有所帮助:)。