Почему, когда я использую его как ресурс, он выходит из строя?

#wpf #xaml

#wpf #xaml

Вопрос:

У меня есть DataGridTextColumn, и я хотел установить текст посередине, я сделал это XAML :

         <DataGridTextColumn Header="Smooth" Binding="{Binding Smoothing}">
             <DataGridTextColumn.ElementStyle>
                    <Style TargetType="TextBox">
                        <Setter Property="VerticalContentAlignment" Value="Center"/>
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    </Style>
             </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
  

Это сработало нормально. У меня много DataGridTextColumn, поэтому я хотел извлечь стиль как ресурс. Который выглядит как :

  <UserControl.Resources>
    <Style TargetType="TextBox"  x:Key="TextBoxStyle">
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
    </Style>


</UserControl.Resources>
  

и я делаю это для своего GridItem :

 <DataGridTextColumn Header="Smooth" Binding="{Binding Smoothing}" ElementStyle="{StaticResource ResourceKey=TextBoxStyle}"/>
  

Я на самом деле получаю сбой, жалуясь при проверке TargetType. Есть идеи, почему первые части работают, но не вторая часть?

Спасибо

Комментарии:

1. какой сбой? Вы получаете сообщение об ошибке? Время компиляции или время выполнения?

2. Кажется, что если я использую TextBlock вместо TextBox, это работает лучше.

Ответ №1:

Ваш DataGridTextColumn.ElementStyle должен быть нацелен на a TextBlock , а НЕ TextBox .

 <Style TargetType="TextBlock" x:Key="TextBlockStyle">
     <Setter Property="VerticalContentAlignment" Value="Center"/>
     <Setter Property="HorizontalContentAlignment" Value="Center"/>
 </Style> 
  

Ваш DataGridTextColumn.EditingElementStyle должен быть тем, который нацелен на a TextBox (если ваша таблица данных или столбец доступны для редактирования)

(Просто потому, что в текстовой ячейке, доступной только для чтения, есть текстовый блок, а в текстовой ячейке в режиме редактирования есть текстовое поле)

Комментарии:

1. Спасибо @AngelWPF. Просто измените VerticalContentAlignment на VerticalAlignment 🙂