2017-02-15 5 views
0

Я использую всплывающую подсказку, чтобы показать больше деталей для каждой строки в сетке. Детали отображаются в виде столбцов сетки внутри всплывающей подсказки, но я не могу изменить ширину всплывающей подсказки, чтобы показать их все.UWP - Изменить всплывающую подсказку height/width

Я попытался изменить всплывающую подсказку Ширина, MinWidth, MaxWidth и даже внутренняя ширина сетки; но всплывающая подсказка всегда остается того же размера.

.cs

Rectangle rect = new Rectangle(); 
rect.Opacity = 0.3; 
rect.SetValue(Grid.RowProperty, r); 
rect.SetValue(Grid.ColumnSpanProperty, 7); 
rect.Fill = new SolidColorBrush(Colors.Azure); 
rect.Margin = new Thickness(2); 

MyTooltip mt = new MyTooltip(par); 
mt.Style = Application.Current.Resources["LargeToolTipStyle"] as Style; 

rect.SetValue(ToolTipService.ToolTipProperty, mt); 

STYLES.XAML

<Style x:Key="LargeToolTipStyle" TargetType="local:MyTooltip"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ToolTip"> 
       <ContentPresenter 
           x:Name="LayoutRoot" 
           MaxWidth="800" 
           Padding="{TemplateBinding Padding}" 
           Background="{TemplateBinding Background}" 
           BorderBrush="{TemplateBinding BorderBrush}" 
           BorderThickness="{TemplateBinding BorderThickness}" 
           Content="{TemplateBinding Content}" 
           ContentTemplate="{TemplateBinding ContentTemplate}" 
           ContentTransitions="{TemplateBinding ContentTransitions}" 
           TextWrapping="Wrap"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="OpenStates"> 
          <VisualState x:Name="Closed"> 
           <Storyboard> 
            <FadeOutThemeAnimation TargetName="LayoutRoot" /> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Opened"> 
           <Storyboard> 
            <FadeInThemeAnimation TargetName="LayoutRoot" /> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
       </ContentPresenter> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

MYTOOLTIP.XAML

<UserControl 
    x:Class="Client.MyTooltip" 
    ... 
    d:DesignHeight="300" 
    d:DesignWidth="400"> 

    <Grid Name="TooltipGrid" HorizontalAlignment="Stretch"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"></RowDefinition> 
      <RowDefinition Height="Auto"></RowDefinition> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <TextBlock Name="TooltipHeaderTBL" Text="LEFT HEADER" 
       Grid.Column="0"> 
     </TextBlock> 
     <TextBlock Name="TooltipHeaderTBR" Text="RIGHT HEADER" 
       Grid.Column="1"> 
     </TextBlock> 
     <TextBlock Name="TooltipContentTBL" Text="Content sample (L)" 
       Grid.Row="1" 
       Grid.Column="0"></TextBlock> 
     <TextBlock Name="TooltipContentTBR" Text="Content sample (R)" 
       Grid.Row="1" 
       Grid.Column="1"></TextBlock> 
    </Grid> 
</UserControl> 
+1

Просьба представить ваш XAML, чтобы лучше понять, как вы пытались это сделать. пожалуйста, прочитайте, как задавать вопросы с помощью [mcve]. – AVK

+0

Не могли бы вы объяснить, почему это сообщение было уменьшено после ПОСЛЕ добавления новых данных? – Tiresia

ответ

1

Раствор был там: стиль должен быть применен к объекту Tooltip.

Я непосредственно назначил User Control как ToolTipService.ToolTipProperty, а затем попытался отредактировать стиль пользовательского контроля.

Определение объекта ToolTip с желаемым стилем и назначение моего User Control в качестве его содержимого, сделал трюк.

Rectangle rect = new Rectangle(); 
rect.Opacity = 0.3; 
rect.SetValue(Grid.RowProperty, r); 
rect.SetValue(Grid.ColumnSpanProperty, 7); 
rect.Fill = new SolidColorBrush(Colors.Azure); 
rect.Margin = new Thickness(2); 

MyTooltip mt = new MyTooltip(par); 

ToolTip t = new ToolTip(); 
t.Content = mt; 
t.Style = Application.Current.Resources["LargeToolTipStyle"] as Style; 

rect.SetValue(ToolTipService.ToolTipProperty, t); 
1

MaxWidth из ToolTip - 320 по умолчанию в соответствии с ToolTip styles and templates. Так как стиль ToolTip не открывает свойство MaxWidth для установки, что он может не иметь эффекта, если вы прямо установили MaxWidth свойство для ToolTip, только свойства, такие как Foreground, , Padding и т. Д. Могут напрямую устанавливаться. Таким образом, вы, возможно, потребуется обновить MaxWidth для ContentPresenter, изменив стиль по умолчанию для ToolTip следующим образом:

<Rectangle 
    Grid.Row="0" 
    Grid.ColumnSpan="3" 
    Fill="Azure" 
    Opacity="0.3"> 
    <ToolTipService.ToolTip> 
     <ToolTip> 
      <ToolTip.Style> 
       <Style TargetType="ToolTip"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ToolTip"> 
           <ContentPresenter 
            x:Name="LayoutRoot" 
            MaxWidth="2000" 
            Padding="{TemplateBinding Padding}" 
            Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Content="{TemplateBinding Content}" 
            ContentTemplate="{TemplateBinding ContentTemplate}" 
            ContentTransitions="{TemplateBinding ContentTransitions}" 
            TextWrapping="Wrap"> 
            <VisualStateManager.VisualStateGroups> 
             <VisualStateGroup x:Name="OpenStates"> 
              <VisualState x:Name="Closed"> 
               <Storyboard> 
                <FadeOutThemeAnimation TargetName="LayoutRoot" /> 
               </Storyboard> 
              </VisualState> 
              <VisualState x:Name="Opened"> 
               <Storyboard> 
                <FadeInThemeAnimation TargetName="LayoutRoot" /> 
               </Storyboard> 
              </VisualState> 
             </VisualStateGroup> 
            </VisualStateManager.VisualStateGroups> 
           </ContentPresenter> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ToolTip.Style> 
      <Grid> 
       <Grid.RowDefinitions> 
        ... 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        ... 
       </Grid.ColumnDefinitions> 
       <TextBlock 
        Grid.Row="0" 
        Grid.Column="0" 
        Text="testtriptext on column 0testtriptext on column 0testtriptext on column 0testtriptext on column 0" /> 
       <TextBlock 
        Grid.Row="1" 
        Grid.Column="1" 
        Text="testtriptext on column 1" /> 
       <TextBlock 
        Grid.Row="2" 
        Grid.Column="2" 
        Text="testtriptext on column 2" /> 
      </Grid> 
     </ToolTip> 
    </ToolTipService.ToolTip> 
</Rectangle> 
+0

Отредактировано: Я пытаюсь достичь этого программно. – Tiresia

+0

Это правильный намек, спасибо @Sunteen Wu! Просто нужно было получить те же результаты программным путем. – Tiresia

Смежные вопросы