Вопрос:

WPF динамически создает кнопки по стилю и устанавливает элементы управления внутри

wpf templates dynamic properties

17 просмотра

1 ответ

341 Репутация автора

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

<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");

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

Автор: Zoltan Hernyak Источник Размещён: 12.06.2019 06:05

Ответы (1)


0 плюса

93990 Репутация автора

Подождите, пока 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>метод отсюда .

Автор: mm8 Размещён: 12.06.2019 02:37
Вопросы из категории :
32x32