我已经为我的应用创建了一个自定义按钮,其内容为Textblock
和SymbolIcon
,两者都放在Grid
中。
这是非常简单的代码
<UserControl
...>
<Grid>
<Button Name="ButtonControl">
<Button.Content>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<SymbolIcon Grid.Column="0"
Symbol="Italic"
Name="SymbolIconColumn"
/>
<TextBlock Grid.Column="1"
Text=""
Name="TextBlockColumn"
/>
</Grid>
</Button.Content>
</Button>
</Grid>
</UserControl>
在其类文件中,我宣布了几个属性:
SymbolIcon
基本上设置了Symbol
属性
SymbolIcon
Text
设置Text
Textblock
属性
Click
为Click
Button
事件处理程序
醇>
这是背后的代码:
public string Text
{
get
{
return (string)GetValue(TextProperty);
}
set
{
SetValue(TextProperty, value);
TextBlockColumn.Text = value;
}
}
public Symbol SymbolIcon
{
get
{
return (Symbol)GetValue(SymbolIconProperty);
}
set
{
SetValue(SymbolIconProperty, value);
}
}
public RoutedEventHandler Click
{
get
{
return (RoutedEventHandler)GetValue(ClickProperty);
}
set
{
SetValue(ClickProperty, value);
ButtonControl.Click += value;
}
}
public RoutedEventHandler Click
{
get
{
return (RoutedEventHandler)GetValue(ClickProperty);
}
set
{
SetValue(ClickProperty, value);
ButtonControl.Click += value;
}
}
我已经使用DependencyProperty.Register函数注册了所有这些函数
public static readonly DependencyProperty SymbolIconProperty =
DependencyProperty.Register("SymbolIcon", typeof(Symbol),
typeof(TimerButton), new PropertyMetadata(Symbol.Italic));
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string),
typeof(TimerButton), new PropertyMetadata(""));
public static readonly DependencyProperty ClickProperty =
DependencyProperty.Register("Click", typeof(RoutedEventHandler),
typeof(TimerButton), new PropertyMetadata(null));
我想我已经做了一切,对吧? 所以,如果我将命名空间添加到我的页面并尝试加载它,就像这样
<Page
...
xmlns:bt="using:MyProject.Resources"...>
<bt:TimerButton
SymbolIcon="Accept"
Text="Accept"
/>
设计师甚至没有加载,它给了我这个
System.Runtime.Remoting.RemotingException [9652]设计师进程意外终止!
此外,当页面必须加载时,Debug会崩溃。
答案 0 :(得分:0)
感谢@Clemens,我通过删除不必要的指令以及Click
EventHandler属性来纠正代码。
无法将EventHandler
添加为DependencyProperty
,因此所有调试崩溃并抛出所有异常。我还在弄清楚我将如何添加它。
public string ButtonText
{
get
{
return (string)GetValue(TextProperty);
}
set
{
SetValue(TextProperty, value);
}
}
public Symbol Icon
{
get
{
return (Symbol)GetValue(SymbolIconProperty);
}
set
{
SetValue(SymbolIconProperty, value);
}
}
我还在TextBlock
的{{1}}和Text
SymbolIcon
属性中添加了绑定。我通过向UserControl(Symbol
)提供x:Name
并使用字符串MyButton
绑定属性
{Binding Path=/*name of the property of the UserControl to bind*/, ElementName="MyButton"