如何访问静态类中的textblock或UI Element并设置属性

时间:2016-09-24 07:28:15

标签: uwp uwp-xaml

如何从另一个静态类或静态类助手访问XAML页面中的文本块或textBox或矩形框或UI元素来执行任务。

我有这个问题:
XAML页面中的textBlock:

1)如何在静态类中访问此文本块以设置textblock的前景颜色或通过静态类设置背景矩形框或其他UI元素:

2)如何将textBlock传递给静态类并将其设置如下

textBlock.Foreground = Brushes.Navy;

由于

2 个答案:

答案 0 :(得分:0)

虽然你提出的问题通常不是一个好主意,但可以做得更好(但还有更好的方法)。

所以基本上你可以将Dispatcher和TextBox分配给页面OnNavigatedTo方法中静态类中的某些字段或属性。

您需要分配两者,因为您只能从UI线程访问TextBox,您可以通过Dispatcher.RunAsync方法调用它。

编辑:

(make-my-function foo)

答案 1 :(得分:0)

您可以使用绑定:

的Xaml:

<TextBlock x:Name="AppStatusValueTextBlock" HorizontalAlignment="Left" Margin="1035,174,0,0" TextWrapping="Wrap" Text="{Binding ChangeTextBlockText}" VerticalAlignment="Top" Height="30" Width="230"/>

C#-Class:

class YourClass : INotifyPropertyChanged
{

 private string _changeTextBlockText;

 public string ChangeTextBlockText{
                get
                {
                    return _changeTextBlockText;
                }
                set
                {
                    _changeTextBlockText= value;
                    OnPropertyChanged();
                }
        }


 public event PropertyChangedEventHandler PropertyChanged;

 protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
 {
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
 }

}

编辑:更改前景色的示例

的Xaml:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBlock x:Name="textBlockHex" HorizontalAlignment="Left" Margin="90,180,0,0" TextWrapping="Wrap" Text="hello" VerticalAlignment="Top" Height="75" Width="170" Foreground="{Binding TextBlockColorInHex}"/>
</Grid>

视图模型:

class ViewModel : INotifyPropertyChanged
{

    public string TextBlockColorInHex
    {
        get
        {
            return _textBlockColorInHex;
        }
        set
        {
            this._textBlockColorInHex = value;
            this.OnPropertyChanged();
        }
    }

    public ViewModel()
    {
       SetColorFromThisClass("#ff0000");
    }

    private void SetColorFromThisClass(string colorInHex)
    {
        TextBlockColorInHex = colorInHex;
    }
    private string _textBlockColorInHex;


    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

MainPage.cs:

    public MainPage()
    {
        this.InitializeComponent();

        ViewModel daViewModel = new ViewModel();
        DataContext = daViewModel;

    }