【问题标题】:How to set CheckBox margin dynamically in Silverlight如何在 Silverlight 中动态设置 CheckBox 边距
【发布时间】:2015-07-06 08:16:00
【问题描述】:

我正在我的grid 上动态创建CheckBoxes。现在我还想动态设置margin(尊重CheckBox),但不确定最好的方法是什么。

例如,

  • 如果只有一个 CheckBox,那么margin 应该是{5,0,0,0}
  • 如果有两个CheckBoxes,那么第一个应该有{5,0,0,0},第二个应该有{10,0,0,0},依此类推。 我担心左边距。这些复选框的创建基于List<String>

XAML:

<Grid x:Name="SynonymsGrid" Grid.Column="2" Margin="0,35,0,0" >
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
</Grid>

代码隐藏:

List<String> names = new List<string>() { "one", "two", "three" };
foreach (var name in names)
    {
        CheckBox chb = new CheckBox();
        chb.Content = name;
        chb.Margin = new System.Windows.Thickness { Left = 5, Top = 0, Right = 0, Bottom = 0 };
        synonymsGrid.Children.Add(chb);
    }

上面的代码会将所有复选框设置在一个显而易见的位置。我想过使用for loop,但不确定什么是最好的方法。

解决方案:

for (int i = 0; i < names.Count; i++)
    {
        CheckBox chb = new CheckBox();
        chb.Content = names[i];
        chb.Margin = new System.Windows.Thickness { Left = i * 150, Top = 0, Right = 0, Bottom = 0 };
        synonymsGrid.Children.Add(chb);
    }

【问题讨论】:

  • 我找到了解决方案并更新了答案。感谢收看。
  • @OmegaMan 感谢您的编辑。下次我会记住这些。

标签: c# silverlight margin


【解决方案1】:

当存在执行相同操作的 Xaml 构造/控件时,为什么所有这些可视化 GUI 操作都在后面的代码中?


要在 Xaml 中动态执行此操作...以下是步骤。

首先,StackPanel 可以以水平方式均匀地隔开复选框,而不是使用网格然后将控件边缘化到正确的位置。 注意,你甚至可以在这里停下来,用StackPanel 替换你的网格,甚至不需要这个问题

但在 Xaml 范式中,是什么使它成为数据驱动(动态)的,使用ItemsControl 指定一个面板 或将成为我们的水平空间的区域 (StackPanel)持有动态项目。这些动态项目中的每一个都将派生自包含复选框的模板。

例如,要根据您的 Names 列表实现三个复选框,请使用以下代码:

只需将您的名称列表绑定到使用此 Xaml 的 StackPanelCheckBoxItemsControl

<ItemsControl  ItemsSource="{Binding Names}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding}"
                        Margin="5,0,0,0" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 2016-02-28
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    相关资源
    最近更新 更多