我正在创建一个带有2个文本块的按钮的程序:左边的1个包含用户名,右边的1个包含“Begin” 并且为每个注册用户添加了这些按钮。
我在这个解决方案中有两个项目:一个(VB.NET)作为主程序,另一个(C#)作为CustomControlLibrary ......
现在,我想在自定义控件库中创建这个自定义按钮...我正在尝试创建一个新的自定义控件并将“:Control”更改为“:Button”
Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:LC_Lib.LC_Controls">
<Style TargetType="{x:Type local:UserSelectButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:UserSelectButton}">
<Border Background="{TemplateBinding Background}"
BorderBrush="Black"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock Name="txtb_user"></TextBlock>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace LC_Lib.LC_Controls
{
public class UserSelectButton : Button
{
private string u_name = "";
static UserSelectButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(UserSelectButton), new FrameworkPropertyMetadata(typeof(UserSelectButton)));
}
public string UserName
{
get { return u_name; }
set { u_name = value; }
}
}
}
VB.NET
For Each user In users_list
Dim user_btn As New UserSelectButton
user_btn.UserName = user.Name
Dim top As Double = users_list.IndexOf(user) * 40 + 20
user_btn.Margin = New Thickness(20, top, 0, 75)
user_btn.Tag = users_list.IndexOf(user)
AddHandler user_btn.Click, Sub(s, a)
SignIn()
End Sub
Next
答案 0 :(得分:0)
没有必要继承按钮,你是不是在改变它的功能?您只需创建一个样式,设置按钮的内容并将其设置为所有按钮:
<Style TargetType="{x:Type Button}">
<Setter Property="Content">
<Setter.Value>
<Border Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=Background}"
BorderBrush="Black" BorderThickness="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=Background}">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock Name="txtb_user" Text="{Binding UserName"></TextBlock>
</Grid>
</Border>
</Setter.Value>
</Setter>
</Style>
答案 1 :(得分:0)
如果是这样,或者另一种方式,我如何在文本中分配文本块的文本 继承按钮的UserName属性?
您可以在DependencyProperty
中创建UserSelectButton
,并使用Binding
和RelativeSource={RelativeSource TemplatedParent}
以XAML格式对Mode=TwoWay
进行{{1}}。然后,您可以将任何内容绑定到该依赖项属性。