2014-12-02 65 views
1

顯示我有以下簡單的程序獲取省略號就自動寬度文本

<Window x:Class="TextCutoffExample.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="100" Width="200"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Column="0" Text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" TextTrimming="CharacterEllipsis"/> 
     <Button Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Content="..."/> 
    </Grid> 
</Window> 

在運行時它會產生這個

enter image description here

推窗之外的按鈕。如果我做了第2列Auto 1列*它看起來正確的時候文本太大

enter image description here

但是當文本不是太大使得第2列自動把它放在最右邊。

enter image description here

我希望發生的是該按鈕被旁邊的文本

enter image description here

我能拿得到這個工作,最近是在設置最大寬度文本塊並將第一列設置爲自動

<Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    <TextBlock Grid.Column="0" Text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" TextTrimming="CharacterEllipsis" 
       MaxWidth="180"/> 
    <Button Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Content="..."/> 

這給了我想要的行爲,但我確實不知道在實際代碼中編譯時最大寬度是多少,我將使用它。

我需要做些什麼才能使按鈕跟隨文本的寬度,但如果文本變得太大大的窗口會被省略而不設定固定的最大寬度?

+0

將網格命名並使用轉換器將最大寬度綁定到網格 – Paparazzi 2014-12-02 16:35:57

回答

1

如果我看到你的不足親切評論我把這個從現有的代碼,我不會給努力

<Window x:Class="WidthConverter.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WidthConverter" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <local:WidthConverterParam x:Key="widthConverter"/> 
    </Window.Resources> 
    <Grid x:Name="MainGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0" Text="{Binding ElementName=MainGrid, Path=ActualWidth}" Margin="10,0,0,0"/> 
     <TextBlock Grid.Column="1" Text="{Binding ElementName=MainGrid, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=80}" Margin="10,0,10,0"/> 
     <TextBlock Grid.Column="2" Text="aaaaaaaaaaaaaaaaaaaaaaaaaaaabcdefghijklmnop" TextTrimming="CharacterEllipsis" 
       MaxWidth="{Binding ElementName=MainGrid, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=80}"/> 
     <Button Grid.Column="3" HorizontalAlignment="Left" VerticalAlignment="Top" Content="..."/> 
    </Grid> 
</Window> 

using System.Globalization; 

namespace WidthConverter 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 

    [ValueConversion(typeof(double), typeof(double))] 
    public class WidthConverterParam : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      // value is the total width available 

      double otherWidth; 
      try 
      { 
       otherWidth = System.Convert.ToDouble(parameter); 
      } 
      catch 
      { 
       otherWidth = 100; 
      } 
      if (otherWidth < 0) otherWidth = 0; 

      double width = (double)value - otherWidth; 
      if (width < 0) width = 0; 
      return width; // columnsCount; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 
+1

我並不是故意侮辱你,我只是想要求澄清。感謝您的詳細解答。 – 2014-12-02 17:39:15

0

我的一個同事發現了一個簡單的解決方法之前,如果你敷網在TextBlock它使它的行爲完全按照我的意願。

<Window x:Class="TextCutoffExample.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="100" Width="200"> 
    <Grid> 
     <TextBlock> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"/> 
       <Button Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="15" Content="..."/> 
      </Grid> 
     </TextBlock> 
    </Grid> 
</Window> 

我試圖像其他ContentPresenter「基地」 UI組件,但他們沒有表現出我想要的行爲。

+0

我的解決方案來自生產代碼。這只是在我的腦海裏愚弄佈局。 – Paparazzi 2014-12-02 18:07:10