繁体   English   中英

绑定到ToggleButton

[英]Binding to ToggleButton

我有一个带有30个切换按钮的xaml页面,我需要将每个切换按钮的4个属性绑定到我拥有的类。 我可以进行绑定,但是我希望找到更好的解决方案。

我的班级目前看起来像这样:

public int ToggleButton1Height;
public int ToggleButton1Width;
..
public int ToggleButton2Height;
public int ToggleButton2Width;
..etc

如您所见,每个切换按钮是否都有4个属性,这意味着我的课堂上需要120多个属性。 有没有更好的办法?

我对您的情况有点好奇,但这是我能想到的最快的简单解决方案。 注释中解释了所有代码,但是如果您有任何疑问,请告诉我。 当然,有关如何执行此操作还有很多其他解决方案,但是对于您要执行的操作,我没有很多详细信息。 因此,我希望这对您有用。 您应该能够将所有这些内容复制粘贴到一个新项目中并使其起作用。

XAML:

<Window x:Class="StackOverflowTests.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="Window1"
    x:Name="window1"
    Width="800"
    Height="600"
    Loaded="Window1_Loaded">
    <Window.Resources>
        <!-- 
            Create a style so you don't have to define the properties 30 times.
            The style will tell the ToggleButtons which properties in your class they should look at.
            The ToggleButtonClass object will be bound on the code side
        -->
        <Style TargetType="{x:Type ToggleButton}" x:Key="toggleButtonStyle">
            <Setter Property="Height" Value="{Binding ToggleButtonHeight}" />
            <Setter Property="Width" Value="{Binding ToggleButtonWidth}" />
            <Setter Property="Content" Value="{Binding ToggleButtonText}" />
        </Style>
    </Window.Resources>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <StackPanel x:Name="theStackPanel">
            <!--
                You still have to set the style in each button, in case you add buttons that you don't want to use the properties
                If you don't want to manually set the style, remove the x:Key="toggleButtonStyle" property from the style above
                and also remove the Style="{StaticResource toggleButtonStyle}" from all the toggle buttons below.
            -->         
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
            <ToggleButton Style="{StaticResource toggleButtonStyle}" />
        </StackPanel>
    </ScrollViewer>
</Window>

C#:

using System.Windows;
using System.Windows.Controls.Primitives;

namespace StackOverflowTests
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        // Creating all the classes and setting the DataContext of each ToggleButton
        private void Window1_Loaded(object sender, RoutedEventArgs e)
        {
            int sizeFactor = 0;

            // for each ToggleButton in the StackPanel, create one instance of the ToggleButtonClass
            // and assign it to the DataContext of the ToggleButton, so all the binding in the Style
            // created in XAML can kick in.
            foreach (UIElement element in theStackPanel.Children)
            {
                if (element is ToggleButton)
                {
                    sizeFactor++;

                    ToggleButtonClass toggleButtonClass = new ToggleButtonClass()
                    {
                        ToggleButtonHeight = sizeFactor * 20,
                        ToggleButtonWidth = sizeFactor * 50,
                        ToggleButtonText = "Button " + sizeFactor
                    };

                    (element as ToggleButton).DataContext = toggleButtonClass;
                }
            }
        }
    }

    // your toggle button class
    public class ToggleButtonClass
    {
        public double ToggleButtonHeight { get; set; }
        public double ToggleButtonWidth { get; set; }
        public string ToggleButtonText { get; set; }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM