【问题标题】:Binding without XAML [WPF]没有 XAML 的绑定 [WPF]
【发布时间】:2016-05-15 00:05:04
【问题描述】:

我正在设计一个内部有 256 个按钮的应用程序,并使用 for 循环将它们添加到 C# 代码中的 WrapPanel 中。 XAML 代码中未提及这些按钮。 我的问题是,当单击其中一个时,我必须使用绑定更改其颜色。 我尝试了以下代码,但它不起作用(仅更改按钮的内容):

        private void NewButton_Click(object sender, RoutedEventArgs e)
    {
        Button btn = (Button)sender;

        for (int i = 0; i < counter; i++)
        {
            if (btn.Name == ("Butt" + i))
            {
                btn.Content = "works";
                MyData mydata = new MyData();
                Binding binding = new Binding("Color");
                binding.Source = mydata;
                binding.Source = btn;
                break;
            }
        }
    }

        private int counter = 0;
    public class MyData
    {
        public static Brush _Color = Brushes.Red;
        public Brush Color
        {
            get
            {
                return _Color;
            }
        }
    }
    public MainWindow()
    {

        InitializeComponent();

        int num = number(3);
        List<Button> btnList = new List<Button>();
        for(int i =0; i<(num*num); i++)
        {

            Button button = new Button();

            button.Name = "Butt" + counter;

            button.Content = "New";

            counter++;
            button.Height = 35;
            button.Width = 35;
            button.Click += new RoutedEventHandler(NewButton_Click);
            wp.Children.Add(button);

        }

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    如果您尝试将按钮的背景颜色绑定到“MyData”类对象,那么您就快到了...

    首先,创建绑定对象,将源设置为“mydata”的新实例,然后公开“Color”属性的路径。

    然后,您需要将新的 BINDING 对象保存到您的按钮控件,并告诉它您希望将 BackgroundProperty 绑定到新创建的绑定。以下对您的代码的细微调整有效。不完全是为什么您的方法适合您的整个项目,但希望能达到您的预期。

                if (btn.Name == ("Butt" + i))
                {
                    btn.Content = "works";
                    MyData mydata = new MyData();
                    var oBind = new Binding
                    {
                        // bind its source to this view model instance
                        Source = mydata,
                        // what property on THE BUTTON do want to be bound to.
                        Path = new PropertyPath("Color")
                    };
    
                    btn.SetBinding(BackgroundProperty, oBind);
                    btn.DataContext = oBind;
                    break;
                }
    

    【讨论】:

    • btn.DataContext = oBind; 行是做什么的?
    • @EduBic,老实说,我不记得那是在我 WPF 时代的早期,并且认为这甚至不是必需的。
    猜你喜欢
    • 1970-01-01
    • 2011-07-15
    • 2017-10-02
    • 2017-08-20
    • 2011-02-28
    • 2015-11-23
    • 2011-02-23
    • 2011-08-09
    • 2017-07-14
    相关资源
    最近更新 更多