继承WPF按钮并在其中添加额外的文本块

时间:2015-01-26 11:43:34

标签: c# wpf vb.net custom-controls controltemplate

我正在创建一个带有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

  • 我应该怎样做才能让他们出现在我的表格中?我似乎无法看到它们,但是当我点击它们时,它实际上会发射......
  • 我可以通过在Generic.xaml的边框中插入文本块元素来在网格中“添加”两个文本块吗?
  • 如果是这样,或者另一种方式,如何在继承按钮的UserName属性中分配文本块的文本?

2 个答案:

答案 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,并使用BindingRelativeSource={RelativeSource TemplatedParent}以XAML格式对Mode=TwoWay进行{{1}}。然后,您可以将任何内容绑定到该依赖项属性。