在 Window.Resources 中设置或获取子组件属性

本文关键字:获取 组件 属性 设置 Window Resources | 更新日期: 2023-09-27 18:30:54

如何从代码中设置组件文本块文本,我尝试像this.dialog.lbTitle.Text一样访问它,但这无法从代码访问。

编辑:

CustomDialog dialog;
public async void button_Click(object sender, RoutedEventArgs e)
{           
    this.dialog = (CustomDialog)this.Resources["CustomDialogTest"];
    //this.dialog.lbTitle.Text = "Haloo"; --> I like to do something like this
        this.dialog.Height = 500;
    await this.ShowMetroDialogAsync(dialog);
}

XAML:

...
xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
...
<Window.Resources>
    <Style x:Key="ButtonOpacity" TargetType="{x:Type Button}">
        <Setter Property="Control.Opacity" Value="0.2"></Setter>
    </Style>
    <Dialog:CustomDialog x:Key="CustomDialogTest"
                                x:Name="CustomTestDialog">
        <Grid Background="Beige" ShowGridLines="False">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto"  />
            </Grid.RowDefinitions>
            <Image Height="250" Source="/images/rumus.jpg" Grid.Column="0" Grid.Row="0" Grid.RowSpan="12" Margin="10,10,10,10" />
            <TextBlock Grid.Column="1" Grid.Row="0" FontSize="20" Text="Title:" />
            <TextBlock Name="lbTitle" Grid.Column="2" Grid.Row="0" FontSize="20" Text="" />
        </Grid>
    </Dialog:CustomDialog>
</Window.Resources> 

在 Window.Resources 中设置或获取子组件属性

在您的方案中,您不会通过使用分部类定义共享类"对话框"。要查看FramworkElement的子项内部,您可以使用它。

public async void button_Click(object sender, RoutedEventArgs e)
{
    dialog = (CustomDialog)this.Resources["CustomDialogTest"];
    // at this point ensure that "lbTitle" is instantiated and part of the dialogs visual tree
    var tb = dialog.FindName("lbTitle") as TextBlock;
    if(tb != null && dialog != null)
    {
        tb.Text = "Haloo"; --> I like to do something like this
    }
}