Я делаю программу с кнопками, имеющими 2 текстовых блока: 1 слева, который содержит имя пользователя, а другой справа - «Начало» И эти кнопки добавляются для каждый зарегистрированный пользователь.Наследующая кнопка WPF и добавление в нее дополнительных текстовых блоков
У меня есть два проекта в этом решении: Один (VB.NET) в качестве основной программы, а другой (C#) как CustomControlLibrary ...
Теперь я хочу, чтобы сделать эту пользовательскую кнопку в Пользовательском Библиотека управления ... Я пытаюсь создать новый пользовательский контроль и изменил ": Control" в ": Кнопка"
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
- Что я должен сделать для них, чтобы появиться в моей форме? Я не могу их видеть, но когда я нажимаю на них, он на самом деле срабатывает ...
- Могу ли я добавить два текстовых блока внутри Grid, вставив элементы textblock в рамку в Generic.xaml?
- Если это так или иначе, как я могу назначить текст текстового блока в свойстве UserName унаследованной кнопки?
но, я буду делать еще одну кнопку, почему бы мне не наследовать ее? Если бы я установил его на все кнопки, разве это не изменило бы его для другого? –
Все преимущество WPF в том, что для большинства применений вам не нужно наследовать элемент управления. у вас есть несколько точек вмешательства, стиль - самый простой, вы также можете создать ControlTemplate, чтобы изменить внешний вид элемента управления, но сохранить его функциональность. Здесь вы просто хотите, чтобы кнопка выглядела определенным образом, этого можно добиться с помощью стиля. –
Возможно, нет, мне нужно будет динамически изменять строку TextBlock с использованием свойства UserName, которое я создал в коде C# ... –