Dynamically change XAML column text

时间:2015-07-28 16:16:10

标签: c# xaml

How do I programmatically set border XAML objects?

I can set it in the XAML:

<Border Grid.Column="2" Grid.Row="1">
     <TextBlock Text="Typical Code" />
</Border>

Here I have it with a name to set it:

<Border x:Name="Column8Text" Grid.Column="3" Grid.Row="1">
</Border>

This has no effect:

Column8Text.Name = "test";

This is the entire grid im trying to dynamiclly manipulate:

  <StackPanel x:Name="GridViewView" >
                    <Grid x:Name="StaticGridView" Background="WhiteSmoke">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition x:Name="Column5" />
                            <ColumnDefinition x:Name="Column6" />
                            <ColumnDefinition x:Name="Column7" />
                            <ColumnDefinition x:Name="Column8" />
                            <ColumnDefinition x:Name="Column9" />
                            <ColumnDefinition x:Name="Column10" />
                            <ColumnDefinition x:Name="Column11" />
                            <ColumnDefinition x:Name="Column12" />
                        </Grid.ColumnDefinitions>
                        <Grid.Resources>
                            <Style TargetType="Border">
                                <Setter Property="BorderBrush" Value="Black" />
                                <Setter Property="BorderThickness" Value="2" />
                                <Setter Property="Background" Value="White" />
                                <Setter Property="Padding" Value="5" />
                            </Style>
                            <Style TargetType="TextBlock">
                                <Setter Property="TextBlock.FontSize" Value="16" />
                                <Setter Property="VerticalAlignment" Value="Center" />
                                <Setter Property="HorizontalAlignment" Value="Center" />
                                <Setter Property="Foreground" Value="Black" />
                                <Setter Property="TextBlock.FontWeight" Value="Bold" />
                            </Style>
                        </Grid.Resources>
                        <Border Grid.Column="0" Grid.Row="1">
                            <TextBlock Text="Item" />
                        </Border>
                        <Border Grid.Column="1" Grid.Row="1">
                            <TextBlock Text="Drawing" />
                        </Border>
                        <Border Grid.Column="2" Grid.Row="1">
                            <TextBlock Text="Typical Code" />
                        </Border>
                        <Border x:Name="Column8Text" Grid.Column="3" Grid.Row="1">
                        </Border>
                        <Border x:Name="Column9Text" Grid.Column="4" Grid.Row="1">
                        </Border>
                        <Border x:Name="Column10Text" Grid.Column="5" Grid.Row="1">
                        </Border>
                        <Border x:Name="Column11Text" Grid.Column="6" Grid.Row="1">
                        </Border>
                        <Border x:Name="Column12Text" Grid.Column="7" Grid.Row="1">
                        </Border>
                    </Grid>
                </StackPanel>

1 个答案:

答案 0 :(得分:1)

  

这没有效果:Column8Text.Name = "test";

要设置任何子对象的值,不能简单地命名父对象并且可以访问子对象。

必须将每个单独的子控件命名为在后面的代码中访问。

否则,要通过父项更改子对象,应该创建一个自定义控件,该控件具有与下面的子项相关联的特定依赖项属性,以便于将数据传递给子项。

完成您的示例

<Border Grid.Column="2" Grid.Row="1">
     <TextBlock Name="tbBorderChild" Text="Typical Code" />
</Border>

然后在代码隐藏中访问它:

 tbBorderChild.Text = "Changed";