代码背后:
public class LoginButton : Button
{
public static DependencyProperty LoginedProperty;
public static DependencyProperty LoginEventProperty;
public delegate void LoginEventDelegate(object sender, RoutedEventArgs e);
static LoginButton()
{
LoginedProperty = DependencyProperty.Register("Logined", typeof(Boolean), typeof(LoginButton));
LoginEventProperty = DependencyProperty.Register("LoginEvent", typeof(LoginEventDelegate), typeof(LoginButton));
}
public Boolean Logined
{
get { return (Boolean)base.GetValue(LoginedProperty); }
set { base.SetValue(LoginedProperty, value); }
}
public event LoginEventDelegate LoginEvent;
protected virtual void OnLoginEvent(object sender, RoutedEventArgs e)
{
if (LoginEvent != null)
LoginEvent(sender,e);
}
}
XAML:
<ControlTemplate x:Key="LoginButtonTemplate" TargetType="local:LoginButton">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ContentPresenter VerticalAlignment="Center" Margin="10,0,0,0"></ContentPresenter>
<Grid Grid.Column="1" Margin="5,0,0,0">
<Label Name="L" VerticalAlignment="Center" Padding="0" Foreground="#919191" Visibility="Collapsed">logined</Label>
<Button Name="B" Template="{StaticResource CustomButton}" Background="Transparent" BorderThickness="0" Padding="0" Foreground="#3598db" Content="click login"></Button>
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Logined" Value="true">
<Setter TargetName="L" Property="Visibility" Value="Visible"></Setter>
<Setter TargetName="B" Property="Visibility" Value="Collapsed"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
--------------------------------
我想实现这个功能:
Name =&#34; B&#34;在ControlTemplate中,当我单击它时,它可以处理自定义事件OnLoginEvent?
我该怎么办?
--------------------------------
哦,似乎没有人知道我的英语不好的意思
现在我更详细地解释一下这个功能
软件需要管理大约100个或更多帐户,如果帐户未登录,它将显示按钮让用户登录。如果登录,它将显示登录的标签
所以我创建了一个名为LoginButton的新的自定义用户控件,并创建了一个布尔值&#39; Logined&#39;如果登录则控制按钮
不同帐户的Beaucase具有不同的登录功能。所以我创建了一个新的事件&#39; LoginEvent&#39;应用不同的登录功能。现在的问题是按钮Name =&#34; B&#34;要登录。我需要绑定按钮Name =&#34; B&#34;点击活动或预览活动事件&#39; LoginEvent&#39;。但是我找不到绑定它的方法。
请帮助我,非常感谢。
答案 0 :(得分:0)
您可以覆盖OnApplyTemplate
类的LoginButton
方法,并将事件处理程序连接到引发事件的模板中“B”按钮的click事件。
LoginEvent
应该是一个事件而不是依赖属性。
试试这个:
public class LoginButton : Button
{
public static DependencyProperty LoginedProperty;
public delegate void LoginEventDelegate(object sender, RoutedEventArgs e);
static LoginButton()
{
LoginedProperty = DependencyProperty.Register("Logined", typeof(Boolean), typeof(LoginButton));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
Button b = this.Template.FindName("B", this) as Button;
if(b != null)
{
b.Click += (s, e) => OnLoginEvent(s, e);
}
}
public Boolean Logined
{
get { return (Boolean)base.GetValue(LoginedProperty); }
set { base.SetValue(LoginedProperty, value); }
}
public event LoginEventDelegate LoginEvent;
protected virtual void OnLoginEvent(object sender, RoutedEventArgs e)
{
if (LoginEvent != null)
LoginEvent(sender, e);
}
}
<强>用法:强>
<local:LoginButton Template="{StaticResource LoginButtonTemplate}" LoginEvent="LoginButton_LoginEvent"/>
private void LoginButton_LoginEvent(object sender, RoutedEventArgs e)
{
MessageBox.Show("Login!");
}