2012-04-05 206 views
0

我嘗試使用垂直按鈕構建包裝面板。 每個按鈕由圖像和文本塊組成。 我想做一些微軟在窗口左側的Outlook中執行的操作,當用戶移動GridSplitter時,窗口左邊的是 。 當用戶將降低包裝面板的高度時,如果有任何按鈕將不存在,則文本塊將消失(該按鈕將僅由圖像組成)。WPF中水平垂直WrapPanel

我該怎麼做。

感謝

回答

1

如果我理解正確。您想要顯示具有文字和圖像的按鈕,但是如果按鈕的寬度縮小到一定大小,則只會顯示圖像。

如果是這樣,你應該能夠用數據觸發器來實現。

<Window x:Class="StackOverflow1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:StackOverflow1" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <local:isLessThanConverter x:Key="MyisLessThanConverter"/> 
    <Style x:Key="myWidthTrigger" TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType=Button}, Converter={StaticResource MyisLessThanConverter}, ConverterParameter=90}" Value="True"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <ListView HorizontalContentAlignment="Stretch"> 
     <Button x:Name="myButton" Width="Auto"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock x:Name="MyTextBlock" Style="{StaticResource myWidthTrigger}" Text="Test"></TextBlock> 
       <Image Source="image.png" Height="15"></Image> 
      </StackPanel> 
     </Button> 
    </ListView> 
    <GridSplitter Width="5" Grid.Column="1" ResizeDirection="Columns" ResizeBehavior="PreviousAndNext"></GridSplitter> 
</Grid> 

也是用這個IValueConvertor:

[ValueConversion(typeof(double), typeof(string))] 
public class isLessThanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
      if ((double)value < double.Parse((string)parameter)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 

    } 

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

} 

我不是這方面的專家,所以有可能是一個更清潔的方式。我也使用了一個列表視圖,而不是你所請求的wrappanel。

希望這會有幫助

+0

謝謝布倫特!這非常令人沮喪。 – 2012-04-08 07:38:38

+0

沒問題。祝你好運。 – 2012-04-08 17:31:06

0

這聽起來像你想使用什麼是Expander控制。這個StackOverflow post解釋瞭如何在打開另一個時自動關閉其他Expander。這將像你在Outlook中描述的那樣工作。

+0

謝謝克里斯! 我不談論膨脹機(最小化窗口側面的按鈕)。 我在談論GridSplitter,當你把它拿起或放下時,按鈕文字就消失了。 你知道該怎麼做嗎? – 2012-04-05 14:39:12

+0

也許你可以發佈XAML和代碼作爲你正在嘗試做的事例,我們可以幫助你更多。 – 2012-04-05 15:05:42