Обновление текста в Adorner по нажатию кнопки - PullRequest
0 голосов
/ 20 апреля 2011

Я создал своего собственного рекламного устройства, чтобы оно покрывало мое главное окно серым холстом вместе с текстовым блоком в центре, чтобы показать некоторый текст статуса, пока я работал над другим окном.

Что я сейчас делаю, так это извлекаю требуемый adornerElement (т.е. Canvas с текстовым блоком) из моих ресурсов и передаю его рекламодателю в конструкторе моего представления следующим образом -

 ResourceDictionary reportResourceDictionary = App.LoadComponent(new Uri("Resources/ReportResources.xaml", UriKind.Relative)) as ResourceDictionary;
 UIElement adornerElement = reportResourceDictionary["RefreshingReportAdorner"] as UIElement;
 mainWindowBlockMessageAdorner = new MainWindowBlockMessageAdorner(mainPanel, adornerElement);

Но я хочу обновить этот текст в текстовом блоке в некоторых сценариях, скажем, если я нажму на какую-нибудь кнопку в другом окне, но как обновить текст динамически ??

Элемент Adorner из файла ресурсов-

<Grid x:Key="RefreshingReportAdorner">
        <Rectangle Fill="Gray"
                   StrokeThickness="1"
                   Stroke="Gray"
                   HorizontalAlignment="Stretch"
                   VerticalAlignment="Stretch"/>
        <Border BorderBrush="Black"
                BorderThickness="2"
                Background="White"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <TextBlock i18n:LanguageManager.VisualId="6"
                       Text="Some Text(Update dynamically)"                       
                       Padding="15,10,15,10"/>
        </Border>
    </Grid>

Дайте мне знать, если потребуется дополнительный код или подход ..

1 Ответ

1 голос
/ 20 апреля 2011

Вы пытались создать какую-то модель и отправить ее в DataContext элемента RefreshingReportAdorner?

Код:

 var reportResourceDictionary = App.LoadComponent(new Uri("Resources/ReportResources.xaml", UriKind.Relative)) as ResourceDictionary;
 var adornerElement = reportResourceDictionary["RefreshingReportAdorner"] as FrameworkElement;
 var model = new Model(); 
 model.MyText = "Initial text";
 adornerElement.DataContext = model;
 mainWindowBlockMessageAdorner = new MainWindowBlockMessageAdorner(mainPanel, adornerElement);
 ... 
 model.MyText = "Text after click";

XAML:

        <TextBlock i18n:LanguageManager.VisualId="6"
                   Text="{Binding MyText}"                       
                   Padding="15,10,15,10"/>

Модель:

public class Item : INotifyPropertyChanged
{
    private string _myText;
    public string MyText
    {
        get
        {
            return this._myText;
        }
        set
        {
            this._myText= value;
            this.OnPropertyChanged("MyText");
        }
    }
}
...