WPF滑块和开关控制阵列

时间:2016-02-22 17:50:00

标签: c# arrays wpf visual-studio

我的窗口中有大量的滑块,切换开关和隐藏/可见事件,使用数组处理变量很容易,直到我必须显示它们,然后我必须声明吨数变量,用于在布尔值,双精度数和字节数之间进行转换。

有没有办法将控件放入数组?让我们说:

for (uint i = 1; i < 65; i++)
    Slider[i].Value = Parametros[i];

这会让我的生活变得如此简单。

1 个答案:

答案 0 :(得分:1)

由于你的问题的范围相当广泛且不清楚,所以这个粗略的例子有点匆匆抛在一起,但是你想利用WPF的绑定功能和永远有用的ItemsControl,例如。

<ItemsControl ItemsSource="{Binding Sliders}">
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="{x:Type SliderData}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <TextBlock Text="{Binding Name}" />
                <Slider Grid.Column="1" Value="{Binding Value}" />
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

必须在某处定义滑块集合(“数据上下文”)。如果你想要一些简单的东西,你可以控制你的datacontext(即窗口构造函数中的DataContext = this),但是有一个单独的viewmodel(WPF的Google MVVM模式示例)将是首选。

public ObservableCollection<SliderData> Sliders { get; set; }

类似于你的for循环来创建控件......

Sliders = new ObservableCollection<SliderData>();
Sliders.Add(new SliderData() { Name = "Slider 1", Value = 10 });
Sliders.Add(new SliderData() { Name = "Slider 2", Value = 7 });
...

C#支持班级

public class SliderData
{
    // Note: I'm doing this shorthand. You need INotifyPropertyChanged for bindings probably.
    public string Name { get; set; }
    public double Value { get; set; }
}