2012-04-17 125 views
1

我有一个需要放入边框的网格,通过XAML这样做很容易 但我该如何通过C#执行此操作? 到目前为止,我发现的一切都希望在每个单元格周围添加边框。Silverlight:在网格周围添加边框

我需要它看起来像XAML一样,请帮助!

我不能得到的XAML正确地张贴在这里:

<Border Grid.Column="1" 
     Grid.Row="0" 
     Background="AliceBlue" 
     BorderBrush="Black" 
     BorderThickness="4" 
     x:Name="Side6" 
     Visibility="Collapsed"> 
    <UIElement.Projection> 
     <PlaneProjection RotationY="-90" /> 
    </UIElement.Projection> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100"></ColumnDefinition> 
      <ColumnDefinition Width="100"></ColumnDefinition> 
      <ColumnDefinition Width="100"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="100"></RowDefinition> 
      <RowDefinition Height="100"></RowDefinition> 
      <RowDefinition Height="100"></RowDefinition> 
     </Grid.RowDefinitions> 
     <Button Grid.Column="2" Grid.Row="1" Click="RotateRight_Click"> 
      <Button.Content> 
       <StackPanel> 
        <TextBlock HorizontalAlignment="Center">Rotate Right</TextBlock> 
        <TextBlock HorizontalAlignment="Center">To</TextBlock> 
        <TextBlock HorizontalAlignment="Center">Side 4</TextBlock> 
       </StackPanel> 
      </Button.Content> 
     </Button> 
     <Button Grid.Column="0" Grid.Row="1" Click="RotateLeft_Click"> 
      <Button.Content> 
       <StackPanel> 
        <TextBlock HorizontalAlignment="Center">Rotate Left</TextBlock> 
        <TextBlock HorizontalAlignment="Center">To</TextBlock> 
        <TextBlock HorizontalAlignment="Center">Side 2</TextBlock> 
       </StackPanel> 
      </Button.Content> 
     </Button> 
     <TextBlock HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        Grid.Column="1" 
        Grid.Row="1" 
        Text="Side 6"> 
     </TextBlock> 
    </Grid> 
</Border> 

下面是我使用的C#代码,也许你能看到什么,我做错了什么?

public static void panelMain(string strPassGridName, System.Windows.Media.Color mcPassColor, 
int intRowProperty, int intColumnProperty, Visibility vVisibility, 
string[] strButtonTitles, Grid passLayoutRoot, Canvas passCanvas) 
    { 
     Grid panelGrid = new Grid(); 

      panelGrid.Name = strPassGridName; 
      panelGrid.Background = new SolidColorBrush(mcPassColor); 

      panelGrid.SetValue(Grid.RowProperty, intRowProperty); 
      panelGrid.SetValue(Grid.ColumnProperty, intColumnProperty); 
      panelGrid.Visibility = vVisibility; 

     RowDefinition row1 = new RowDefinition(); 
         row1.Height = new GridLength(100, GridUnitType.Auto); 
      panelGrid.RowDefinitions.Add(row1); 

     ColumnDefinition column1 = new ColumnDefinition(); 
         column1.Width = new GridLength(100); 
      panelGrid.ColumnDefinitions.Add(column1); 


     passLayoutRoot.Children.Add(panelGrid); 
    } 
+0

强制性:可以您向我们展示您在C#中尝试过的内容? – Robaticus 2012-04-17 17:35:53

+0

您是否看到[Child](http://msdn.microsoft.com/zh-cn/library/system.windows.controls.decorator.child.aspx)属性? – gliderkite 2012-04-17 17:36:25

+0

是的,那是在哪里告诉我,它已经是一个孩子 – user1339386 2012-04-19 11:58:44

回答

0

你可以做到这一点如下,

 Border gridBorder = new Border(); 
     gridBorder.BorderBrush = new SolidColorBrush(Colors.Black); 
     gridBorder.BorderThickness = new Thickness(4); 
     gridBorder.Child = new Grid(); //Your grid here 
     LayoutRoot.Children.Add(border); // ParentGrid(layout) holding the border 
+0

抱歉,没有工作,我得到“元素已经是另一个元素的孩子。”如果我稍微更改最后一行,我会在我的网格中获得一个正方形以创建边框 Border gridBorder = new Border(); gridBorder.BorderBrush = new SolidColorBrush(Colors.Black); gridBorder.BorderThickness = new Thickness(4); //gridBorder.Child = panelGrid; // grid here panelGrid.Children.Add(gridBorder); – user1339386 2012-04-18 12:24:18

+0

您的最后一行panelGrid.Children.Add(gridBorder);不会工作。您需要将gridBorder添加为根网格的子节点,如下所示。 LayoutRoot.Children.Add(境); – smhnkmr 2012-04-18 14:04:29

+0

我必须错过一些东西,我如何让边框环绕网格?这条线(gridBorder.Child = new Grid();)表示添加新的网格,但是如何创建对正在创建的网格的引用 – user1339386 2012-04-18 14:44:14

1

我想通了,我需要先创建边界,然后网格添加到边境。 一个主要的区别是,我不能直接引用边框对象,我需要“发现”

Border findBorder = passLayoutRoot.FindName("bd" + strPassGridName) as Border; 
    if (findBorder == null) 
    { } 
    else 
    { 
    findBorder.Child = panelGrid; 
    } 

这工作完全.... 感谢所有试图帮助

相关问题