2017-02-15 55 views
0

我利用工具提示顯示網格中每一行的更多詳細信息。 細節顯示爲工具提示內的網格列,但我無法更改工具提示寬度以將它們全部顯示出來。UWP - 更改工具提示高度/寬度

我試着改變工具提示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

的解決方案是正確的有:樣式必須應用到一個工具提示對象

我直接將用戶控件分配爲ToolTipService.ToolTipProperty,然後嘗試編輯用戶控件樣式。

定義一個具有所需樣式的工具提示對象,並將我的用戶控件指定爲其內容。

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

的根據ToolTip styles and templatesToolTip的3210默認爲320。由於ToolTip風格不打開MaxWidth屬性進行設置,如果您直接爲ToolTip設置MaxWidth屬性,可能不會產生任何影響,只有像Foreground,Background,Padding等屬性可以直接設置。所以,你可能需要通過更改默認樣式爲ToolTip如下更新MaxWidthContentPresenter

<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