联键控制的数据(WPF)

0

的问题

我正在应用程序表示20个图形按钮控制在一个MainWindow(Button1到Button20). 每一个按钮控制可以显示一串的内容,并具有提示作为设计下:

<Button x:Name="button1" FontWeight="Bold" FontSize="15" Content="" HorizontalAlignment="Left" Margin="20,69,0,0" VerticalAlignment="Top" Width="92" Height="29" Click="Button_Click" Background="#FFFFFFFF" MouseEnter="button_MouseEnter">
        <Button.ToolTip>
            <Border Margin="-4,0,-4,-3" Padding="10" Background="Yellow">
                <Border.BitmapEffect>
                    <OuterGlowBitmapEffect></OuterGlowBitmapEffect>
                </Border.BitmapEffect>
                <Label x:Name ="lbl1" FontSize="20" Content="{Binding Path=ToolTip}">
                </Label>
            </Border>
        </Button.ToolTip>
        <Button.Effect>
            <DropShadowEffect/>
        </Button.Effect>
    </Button>

我想定义的字符串的内容和工具提串的每一个按钮在XML文件,以便信息可以通过修改XML文件。

为此,我创造了一个模型的定义的一个目称为Bouton(法语):

public class Bouton : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    void Notify(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    int boutonNumber;
    public int BoutonNumber{ get { return boutonNumber; } set { boutonNumber= value; Notify("BoutonNumber"); } }
    string texteBouton;
    public string TexteBouton { get { return texteBouton; } set { texteBouton = value; Notify("TexteBouton"); } }
    string tooltip;
    public string Tooltip { get { return tooltip; } set { tooltip = value; Notify("ToolTip"); } }
    public Bouton(int nb, string tb, string tt)
    {
        BoutonNumber = nb;
        TexteBouton = tb;
        Tooltip = tt;
    }
}

阅读时XML文件,我创建20个对象的Bouton类型有关的信息boutonNumber、内容和工具提示。 然后所有这些Bouton对象是存放到列表中收集。

现在我想要利用数据绑定之间我Bouton表和图控制我的MainWindow能够显示的串的内容和工具提串上的每一个按钮。 在MainWindow,我使用了下列代码:

public MainWindow()
    {
        InitializeComponent();
        List<Bouton> lst = Utilities.CreateList();
        this.DataContext = lst;
    }

在lst是一个列表中收集正确的初始化。

但我不知道如何使数据绑定的工作在按钮上的控制。 我怎么能让20个按钮控制正确地链接到相应的Bouton目(包含在Boutons集)? 我的意思是如何可以Button1控制获得其串从我Bouton1对象,Button2控制获得其串从Bouton2对象,以此类推,直到Button20控制和Bouton20对象?

谢谢你的帮助。 请注意,我是个初学者与WPF这是我的第一个WPF项目Visual Studio.

c# controls windows wpf
2021-11-22 16:00:24
1

最好的答案

0

我认为,最简单的选择是包装你的按钮在一个用户控件.

这个用户控件则包含财产的类型 Bouton (不好命名顺便说一句. -即使它是一个不同语言的术语"按键"已经存在,因此,这是相当模糊不清。 作为非母语是英语,我自己,我还建议得到用来命名,在英文中,它将节省很多头痛的长期运行的,但这可能是主观的)

然后你可以结合直接的财产中的用户控件的模板。 你所要做的就是给每个用户控件正确的按钮的数据。

例如。

public class CustomButton : UserControl
{
    public Bouton ParsedButtonData { get; set; }

    public CustomButton()
    {
        DataContext = this;
        InitializeComponent();
    }
}

并在你的用户控件的模板:

<Button ...>
    <Button.ToolTip>
        <Border ...>
            <Label Content="{Binding ParsedButtonData.Tooltip}" ...>
            </Label>
        </Border>
    </Button.ToolTip>
</Button>

然后你可以的地方的用户控件在XAML这样的:

xmlns:ctrls="clr-namespace:MyProject.MyNamespace"

<ctrls:CustomButton name="myFirstButton"/>

现在你要做的就是确保每个CustomButton有他们的ParsedButtonData设置的相对应部分的数据。 你可以设定此手动为每个按钮建立在你的摘要或者你可以创建CustomButtons通过C#在第一位。

如果你创造你的UserControls在换,例如:

public void SomeMethod()
{
    myFirstButton.ParsedButtonData = lst[0];
}

或者,你可能会想要看到伸 ItemsControl. 它基本上是由这种申请。 一个获取定具有该视图可以是,它可以是任何集型的,例如 List<>ObservableCollection<>. 然后,它创建了它的儿童从这一收集、设置的属性自动的相应要件所述的名单。

这方面的例子将是 DataGridListView. 我觉得有点更多地参与,不过,如果你真的只是想把一堆一个按钮在一个单视图。

2021-11-22 17:47:49

我真的很感谢你的兴趣我的问题,你的回答和细节的代码,你给了它。 我会给它一试。 谢谢你的帮助!
Bruno Barral

我想这码昨天。 我仍然有一些问题:我做了类CustomButton inheritate从按钮(而不是从用户控件作为你的建议)但是我有一个错误的信息击事件,这是说不存在CustomButton类。 我很惊讶因为基类(按钮)具有击事件的实施。 我试图呼叫基地。点击()从CustomButton但我还是会得到一个错误信息。 我不明白为什么击事件中不存在CustomButton,因为它不存在按钮类。
Bruno Barral

为什么你不用一个用户控件,而不是继承按钮吗? 在一个用户控件,你一个容易地注册击事件对于任何按钮你的地方的模板。
Shrimperator

好吧,我会尝试这个。 谢谢你。
Bruno Barral

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................