在Windows 8中以编程方式向StackPanel添加边框

5
我正在尝试在程序中动态添加StackPanel并设置以下属性,具体的C#代码如下:
BorderThickness
BorderBrush

有没有想法如何通过程序进行设置?
3个回答

26

我知道这是一年后了,但如果有人仍需要,我已经找到了答案。

这里有一个完整的例子

// Create a StackPanel and Add children
StackPanel myStackPanel = new StackPanel();
Border myBorder1 = new Border();
myBorder1.Background = Brushes.SkyBlue;
myBorder1.BorderBrush = Brushes.Black;
myBorder1.BorderThickness = new Thickness(1);
TextBlock txt1 = new TextBlock();
txt1.Foreground = Brushes.Black;
txt1.FontSize = 12;
txt1.Text = "Stacked Item #1";
myBorder1.Child = txt1;

Border myBorder2 = new Border();
myBorder2.Background = Brushes.CadetBlue;
myBorder2.Width = 400;
myBorder2.BorderBrush = Brushes.Black;
myBorder2.BorderThickness = new Thickness(1);
TextBlock txt2 = new TextBlock();
txt2.Foreground = Brushes.Black;
txt2.FontSize = 14;
txt2.Text = "Stacked Item #2";
myBorder2.Child = txt2;

// Add the Borders to the StackPanel Children Collection
myStackPanel.Children.Add(myBorder1);
myStackPanel.Children.Add(myBorder2);
mainWindow.Content = myStackPanel;

1
StackPanel没有BorderThickness或BorderBrush属性,只有Background属性。如果您想设置这些属性,您需要将StackPanel包装在一个Border控件中:
<Border  x:Name="StackBorder">
<StackPanel>
</Border>

您可以随后调用:

StackBorder.BorderThickness = new Thickness(1);
StackBorder.BorderBrush = new Windows.UI.Xaml.Media.SolidColorBrush(Windows.UI.Colors.Red);

好主意……唯一的问题是我会有“x”个StackPanel,所以我需要在代码后台创建所有这些面板。我能够以编程的方式创建边框和StackPanel对象,但似乎找不到将StackPanel添加到边框中的正确语法。有什么建议吗? - iTrout
@iTrout,听起来你应该使用Itemscontrol而不是在代码中创建东西。 - N_A
@mydogisbox - 我正在使用Callisto Flyout,所以我需要在代码中构建它。如果我能够使用XAML加载Callisto Flyout,那将是美好的梦想! - iTrout

0

您不能在 StackPanel 对象本身上设置边框属性。您需要将 StackPanel 对象放置在 Border 对象内,并使用以下类似的方式在 Border 对象上设置 BorderThicknessBorderBrush 属性:

myBorder.BorderBrush = Brushes.Black;
myBorder.BorderThickness = new Thickness(1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接