WPF динамически создает кнопки по стилю и устанавливает элементы управления внутри - PullRequest
0 голосов
/ 12 июня 2019

У нас есть стиль, определенный следующим образом:

<Style x:Key="StartButtonStyle" TargetType="{x:Type Button}">           
 <Setter Property="Template">
   <Setter.Value>
     <ControlTemplate>
       <Button ... Style="{StaticResource StartBtnStyle}">
         <Button.Content>
          <StackPanel>
              <TextBlock x:Name="Line1" Text="..." FontSize="20" />
              <TextBlock x:Name="Line2" Text="..." FontSize="8" />
          </StackPanel>
       </Button.Content>
    </Button>
   </ControlTemplate>
  </Setter.Value>           
 </Setter>      

Мы создаем кнопку динамически:

var button = new Button() {
    Margin = new Thickness(3d,3d,3d,10d),
    Style = FindResource("StartButtonStyle") as Style,
};

Мы хотим найти текстовый блок «Line1» внутри новой кнопки и установить свойство Text:

var line1 = (TextBlock)button.FindName("Line1");

Но он находит только «ноль» :( Как нам найти текстовый блок внутри кнопки? Любой совет приветствуется! Заранее спасибо!

1 Ответ

1 голос
/ 12 июня 2019

Подождите, пока не будет применен Style - перед этим нет элемента TextBlock - к Button, а затем найдите TextBlock в визуальном дереве:

var button = new Button()
{
    Margin = new Thickness(3d, 3d, 3d, 10d),
    Style = FindResource("StartButtonStyle") as Style,
};
button.Loaded += (s, e) => 
{
    TextBlock line1 = FindChild<TextBlock>(button, "Line1");
    if(line1 != null)
    {
        line1.Text = "...";
    }
};

Рекурсивный FindChild<T> метод от здесь .

...