【问题标题】:WPF change UserControl textblock from another windowWPF 从另一个窗口更改 UserControl 文本块
【发布时间】:2018-02-07 07:51:16
【问题描述】:

大家好,我是 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”。

我在这里做错了什么?

【问题讨论】:

    标签: c# wpf xaml user-controls


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      可能是您在 MainWindow 的 XAML 代码中创建了一个 curTemp 实例吗?然后你不要修改这个显示的curTemp实例的文本而是新创建的(第二个)但没有显示的curTemp实例的文本称为_curTempWindow

      【讨论】:

        【解决方案3】:

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

        然后您可以在 XAML 中为元素指定 x:Name

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-10
          • 2016-10-24
          • 2012-12-21
          相关资源
          最近更新 更多