![](/img/trans.png)
[英]How can I programmatically access a specific Run after adding it to a Windows.UI.Xaml.Controls.TextBlock?
[英]How to access textblock or UI Element in static class and set the properties
如何從另一個靜態類或靜態類助手訪問 XAML 頁面中的文本塊或文本框或矩形框或 UI 元素以執行任務。
我有這個問題:
XAML 頁面中的 textBlock:
1) 如何在靜態類中訪問此文本塊以通過靜態類設置文本塊的前景色或設置背景矩形框或其他 UI 元素:
2) 如何將 textBlock 傳遞給靜態類並將其設置如下
textBlock.Foreground = Brushes.Navy;
謝謝
雖然你問的一般來說真的不是一個好主意,但它可以做到(但同樣有更好的方法)。
所以基本上你可以將 Dispatcher 和 TextBox 分配給頁面 OnNavigatedTo 方法中靜態類中的某些字段或屬性。
您需要分配兩者,因為您只能從 UI 線程訪問 TextBox,並且可以通過 Dispatcher.RunAsync 方法調用它。
編輯:
<TextBox Name="textBox"/>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
myStaticClass.TextBox = textBox;
myStaticClass.Dispatcher = Dispatcher;
}
您可以使用綁定:
Xml:
<TextBlock x:Name="AppStatusValueTextBlock" HorizontalAlignment="Left" Margin="1035,174,0,0" TextWrapping="Wrap" Text="{Binding ChangeTextBlockText}" VerticalAlignment="Top" Height="30" Width="230"/>
C#-類:
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));
}
}
編輯:更改前景色的示例
Xml:
<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));
}
}
主頁.cs:
public MainPage()
{
this.InitializeComponent();
ViewModel daViewModel = new ViewModel();
DataContext = daViewModel;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.