WPF从另一个窗口更改UserControl文本块

时间:2018-02-07 07:51:16

标签: c# wpf xaml user-controls

嘿,我是WPF的新手,所以这是我的问题:

当textBlock位于名为curTemp.xaml的窗口中时,如何从mainWindow更改TextBlock中的文本?

curTemp.xaml代码:

public partial class curTemp : UserControl
    {
        public string _valTempChange
        {
            get { return middleForcastCurrentTemp.Text; }
            set { middleForcastCurrentTemp.Text = value; }
        }

        public curTemp()
        {
            InitializeComponent();
        }
    }

上述UserControl的Xaml:

<Grid>
        <TextBlock TextWrapping="Wrap" Padding="5" Foreground="White" Panel.ZIndex="7" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="15,-110,-43,0" Width="198" Height="122">
            <TextBlock.Effect>
                <DropShadowEffect BlurRadius="4" Direction="0" ShadowDepth="0" />
            </TextBlock.Effect>
                    <outlineText:OutlinedTextBlock Height="146" Width="192" TextOptions.TextRenderingMode="Aliased" FontFamily="Segoe UI" FontSize="100" x:FieldModifier="public" x:Name="middleForcastCurrentTemp" 
                                            FontWeight="Medium" TextWrapping="Wrap" TextAlignment="Right" Stroke="Black" StrokeThickness="3" Fill="White" Text="10"/>
        </TextBlock>
    </Grid>

在我的MainWindow代码中:

public MainWindow()
        {
            InitializeComponent();

            curTemp _curTempWindow = new curTemp();

            _curTempWindow._valTempChange = "55";

        }

当我运行该代码时,它永远不会在textBlock中显示“55”。它只显示我的默认文本“10”。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

您正在curTemp的构造函数中创建MainWindow的新实例,但您无法显示它。

是否可以在curTemp的XAML代码中创建MainWindow个实例?然后,您不会修改此显示的curTemp实例的文本,但是新创建的(第二个)但未显示的curTemp实例的文本称为_curTempWindow

答案 1 :(得分:0)

您需要访问用户控件的当前对象。 目前您正在创建一个新对象。 我不确定您是如何使用用户控件以及您使用的模式。

  

您可以在用户控件中创建单例实例并访问   主窗口中的用户控件实例。

答案 2 :(得分:0)

curTemp不是一个窗口。这是一个UserControl。您在哪里创建实际在屏幕上看到的UserControl实例?可能在您的XAML标记中,即在MainWindow.xaml

然后,您可以在XAML中为元素提供x:Name

<local:curTemp x:Name="uc" />

...并使用其名称设置此实例的_valTempChange属性:

public MainWindow()
{
    InitializeComponent();
    uc._curTempWindow._valTempChange = "55";
}