2017-02-02 9 views
1

私はイメージとラベルでいっぱいの2行のグリッドを持っています。ラベルのサイズはロックされていますが、上の画像はグリッドで縮小します。画像はそれが本当に見えないほど小さくなると、私はラベルがグリッドの中央に移動させるべきだと思い崩壊への可視性を、設定したい、< 30ピクセルの高さと言います。コントロールが特定の高さよりも小さい場合、XAMLでイベントをトリガーできますか?

これは< Xなるように高さを探して、何らかのトリガとXAMLで純粋に達成された場合、それはいいだろう。

これは可能ですか?そうでなければ、画像の高さを確認するための最も洗練されたソリューションは何でしょうか?ここで

+2

はカスタムコンバータを使用して、グリッドの高さに可視性をバインドできません...私はこれが最善または唯一の解決策である言っていないんだけど、うまくいけば、それはあなたが始めるのだろうか? – sous2817

+0

Googleカスタムコンバータを使用してお知らせします。コンバータの事@DanWheeler乾杯 – DanWheeler

+2

は動作しますが、グリッドの 'ActualHeight'、ない' Height'に特異的に結合する必要があります。 'Height'は実行時に決して変化しません。 ActualHeightはそうです。 –

答えて

2

は一つの方法です。

public class HeightToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var gridHeight = System.Convert.ToDouble(value); 

     return gridHeight < 200 ? Visibility.Collapsed : Visibility.Visible; 
    } 

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

そして、ここでは、XAMLである:まず、あなたがコンバータ必要なだけのテストのために

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:WpfApplication1" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     Title="MainWindow" 
     Width="525" 
     Height="350" 
     mc:Ignorable="d"> 
    <Grid Name="grid"> 
     <Grid.Resources> 
      <local:HeightToVisibilityConverter x:Key="HeightToVisibilityConverter" /> 
     </Grid.Resources> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Label Grid.Row="0" 
       Content="Some Text" /> 
     <Image Grid.Row="1" 
       Source="zeros.jpg" 
       Visibility="{Binding ElementName=grid, 
            Path=ActualHeight, 
            Converter={StaticResource HeightToVisibilityConverter}}" /> 

    </Grid> 
</Window> 

を、私はグリッドの高さが200未満だった場合は、それを変更することができます非表示にするように設定しましたあなたの状況に合ったものにしてください。

+0

これは仕事を完璧にしてくれてありがとう。私は基本的にこれを実装しましたが、グリッドではなく画像の高さを使用しようとしていましたが、画像ActualHeightは常に0だったので機能しませんでした。何が起きてる? – DanWheeler

+1

は、私はWPFの専門家だが、すべてがレイアウトされるまで、画像要素のActualHeightが設定されていないので、コンバータが発射された最初の時間を0の値を有します。何らかの理由で私は考えていませんが、イメージコントロールのActualHeightプロパティは、ウィンドウのサイズが変更されたときにコンバーターを起動しませんが、グリッドのActualHeightにバインドするときにコンバーターが起動します。うまくいけば、私よりも専門知識のある誰かがチャイムに入ります。なぜなら今私は好奇心が強いからです! – sous2817

+0

興味深い。まあ、少なくとも私はそれが欲しいので、機能しているので、もう一度感謝します。 – DanWheeler

関連する問題