如何从另一个静态类或静态类助手访问XAML页面中的文本块或textBox或矩形框或UI元素来执行任务。
我有这个问题:
XAML页面中的textBlock:
1)如何在静态类中访问此文本块以设置textblock的前景颜色或通过静态类设置背景矩形框或其他UI元素:
2)如何将textBlock传递给静态类并将其设置如下
textBlock.Foreground = Brushes.Navy;
由于
答案 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;
}