2017-01-11 8 views
0

Popupを含むComboBox自分自身をスタイリングしたとき、スタイルコンボボックスが異なっています。今度は、コレクションが空の場合(Count = 0)、バインドされたプロパティがNullの場合ではなく、Popupにメッセージを表示します。メッセージは、一部のテキストを含むちょうどTextBlockである必要があります。
私はTriggerで動作しないで変更しようとしました。空のコレクション

<Popup Name="PART_Popup" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Grid.ColumnSpan="2" Placement="Bottom"> 
<Border x:Name="DropDownBorder" Height="Auto" MaxHeight="100" Width="100" BorderBrush="Blue" BorderThickness="1"> 
    <ScrollViewer x:Name="DropDownScrollViewer" Background="White"> 
     <ContentControl x:Name="PopupContent"> 
      <Grid RenderOptions.ClearTypeHint="Enabled"> 
       <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0"> 
        <Rectangle x:Name="OpaqueRect" Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/> 
       </Canvas> 
       <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" /> 
      </Grid> 
     </ContentControl> 
    </ScrollViewer> 
</Border></Popup> 

答えて

1

collection.count ...ようにポップアップが表示となります。ここに私はTextBlockPopupの中に入れ、をHasItemsに基づいて制御しました。

 <Popup 
       x:Name="PART_Popup" 
       Grid.ColumnSpan="2" 
       Margin="1" 
       AllowsTransparency="true" 
       IsOpen="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
       Placement="Bottom" 
       PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}"> 
       <Popup.Resources> 
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
        <local:InverseBooleanToVisiblityConverter x:Key="InverseBooleanToVisiblityConverter" /> 
       </Popup.Resources> 

       <Grid> 
        <TextBlock Text="No Items" Visibility="{Binding HasItems, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource InverseBooleanToVisiblityConverter}}" /> 
        <Border 
         x:Name="dropDownBorder" 
         Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" 
         BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" 
         BorderThickness="1" 
         Visibility="{Binding HasItems, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}"> 
         <ScrollViewer x:Name="DropDownScrollViewer"> 
          <Grid x:Name="grid" RenderOptions.ClearTypeHint="Enabled"> 
           <Canvas 
            x:Name="canvas" 
            Width="0" 
            Height="0" 
            HorizontalAlignment="Left" 
            VerticalAlignment="Top"> 
            <Rectangle 
             x:Name="opaqueRect" 
             Width="{Binding ActualWidth, ElementName=dropDownBorder}" 
             Height="{Binding ActualHeight, ElementName=dropDownBorder}" 
             Fill="{Binding Background, ElementName=dropDownBorder}" /> 
           </Canvas> 
           <ItemsPresenter 
            x:Name="ItemsPresenter" 
            KeyboardNavigation.DirectionalNavigation="Contained" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
          </Grid> 
         </ScrollViewer> 
        </Border> 
       </Grid> 
      </Popup> 

およびコンバータ、

public class InverseBooleanToVisiblityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (bool)value ? Visibility.Collapsed : Visibility.Visible; 
    } 

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

'Visibility = Collapsed'を使った素晴らしいアイデア!私の 'ComboBox'は期待通りに動作します –

0

コンボボックスのitemsourceを使用し、あなたのコレクションを初期化:Popupは次のようになります。あなたのコレクションには項目が含まれていない場合、あなたはComboBoxHasItemsプロパティを利用することができ

+0

これは、そのような条件に基づいて異なるコンテンツを表示するための 'ComboBox'sテンプレートを、スタイルする方法について尋ねた質問に答えていません。 –

関連する問題