Ral*_*alt 2 c# xaml windows-8 windows-runtime winrt-xaml
我试图用两个按钮创建一个自定义控件(例如)。我有一个Generic.Xaml文件,看起来像这样
<Style TargetType="local:DoubleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:DoubleButton">
<Grid>
<Button x:Name="leftButton" Click="leftButtonClick" />
<Button x:Name="rightButton" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
DoubleButton类如下所示:
public sealed class DoubleButton : Control
{
public DoubleButton()
{
this.DefaultStyleKey = typeof(DoubleButton);
}
public void leftButtonClick(object sender, RoutedEventArgs e)
{
MessageDialog dlg = new MessageDialog("message");
}
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法永远不会被调用。如果有人对如何为自定义控件引发事件有个好主意。
谢谢
如果给定的控件具有事件处理程序,则可以像这样设置它...
<Grid>
<Button x:Name="PART_leftButton" />
<Button x:Name="PART_rightButton" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
名称的第一部分以PART_开头
控件的代码如下所示:
[TemplatePart(Name = "PART_leftButton", Type = typeof(Button))]
public class CustomControl1 : Control
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var button = Template.FindName("PART_leftButton", this) as Button;
if (button != null)
{
button.Click += (s, a) => Console.WriteLine(@"click");
}
}
}
Run Code Online (Sandbox Code Playgroud)
...当应用控件模板时,将添加事件处理程序。注意类定义中的属性“ TemplatePartAttribute”。
保留此属性不会使您的程序崩溃或进行任何其他操作。这是专业的礼节,适合那些以后可能会阅读您的代码的人。并且由Blend其他曲面设计师使用。这是一个非常有用的约定。
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |