2015-04-01 4 views
1

В моем приложении C#/WPF у меня есть Datagrid с несколькими столбцами DataGridTextColumn, используя как перенос текста, так и всплывающую подсказку.Стиль DataGridTextColumn с оберткой и подсказкой

Я мог бы написать каждый столбец, как это (и это работает отлично):

<DataGridTextColumn Header="Name" Binding="{Binding Name}"> 
    <DataGridTextColumn.ElementStyle> 
     <Style> 
      <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" Value="Some tooltip text" /> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
</DataGridTextColumn> 

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

До сих пор, вот мой стиль:

<Window.Resources> 
    <Style x:Key="WrapStyle" TargetType="{x:Type DataGridCell}"> 
     <Style.Setters> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridCell}"> 
         <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" TextWrapping="Wrap"> 
          <TextBox.ToolTip> 
           <ToolTip> 
            <ToolTip.Content> 
             <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tooltip}" /> 
            </ToolTip.Content> 
           </ToolTip> 
          </TextBox.ToolTip> 
         </TextBox> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style.Setters> 
    </Style> 
</Window.Resources> 

И моя колонка:

<DataGridTextColumn Header="Name" Binding="{Binding Name}" CellStyle="{StaticResource WrapStyle}" /> 

Проблема заключается в том, что я не могу указать подсказку для перехода к стилю. Есть ли способ сделать это, не написав 5 строк из DataGridTextColumn.CellStyle для каждого столбца? Благодаря

ответ

1

Измените стиль на -

<Window.Resources> 
    <Style x:Key="WrapStyle" TargetType="DataGridCell"> 
     <Style.Setters> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridCell}"> 
         <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" TextWrapping="Wrap"> 
          <TextBox.ToolTip> 
           <ToolTip> 
            <ToolTip.Content> 
             <TextBlock Text="{Binding Path=Tooltip}"></TextBlock> 
            </ToolTip.Content> 
           </ToolTip> 
          </TextBox.ToolTip> 
         </TextBox> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style.Setters> 
    </Style> 
</Window.Resources> 
+0

Как вы передаете текст всплывающей подсказки к стилю от DataGridTextColumn? Он не принимает параметр всплывающей подсказки – Noxxys

+0

Подсказка может быть свойством элемента, который в настоящее время связан. то есть. если коллекция Student связана как источник элементов, а класс Student имеет свойство Tooltip, вы можете установить его как подсказку, как показано выше. – piyush

+0

@piyush Можете ли вы рассказать мне, как использовать стиль выше в ** DataGridTextColumn ** .. Вы объяснили это в предыдущем комментарии, но я не понял его. Вот как это будет определено, я пытаюсь понять, как мы можем передать текст всплывающей подсказки в этот стиль? S52