2011-02-22 7 views
4

일부 항목을 표시하는 데 사용할 WPF에서 사용자 지정 모양의 ListBox를 만들려고합니다. 구름 모양과 같은 모양이 필요합니다 (첨부 파일 참조). 이것을 달성하는 가장 간단한 방법은 무엇입니까 (preffably blend). 많은 감사합니다. 이 작업을 수행하는WPF 사용자 지정 목록 상자

Cloud Shape

답변

5

방법 중 하나는 단지에 아무런 테두리 목록 상자를 드롭 구름 이미지 (바람직하게는 SVG)과 그 위에을하는 것입니다.

편집 :

<Window x:Class="WpfApplication2.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="362" Width="574"> <Window.Resources> <!--Control colors.--> <Color x:Key="WindowColor">#FFE8EDF9</Color> <Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color> <Color x:Key="ContentAreaColorDark">#FF7381F9</Color> <Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color> <Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color> <Color x:Key="DisabledForegroundColor">#FF888888</Color> <Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color> <Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color> <Color x:Key="ControlLightColor">White</Color> <Color x:Key="ControlMediumColor">#FF7381F9</Color> <Color x:Key="ControlDarkColor">#FF211AA9</Color> <Color x:Key="ControlMouseOverColor">#FF3843C4</Color> <Color x:Key="ControlPressedColor">#FF211AA9</Color> <Color x:Key="GlyphColor">#FF444444</Color> <Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color> <!--Border colors--> <Color x:Key="BorderLightColor">#FFCCCCCC</Color> <Color x:Key="BorderMediumColor">#FF888888</Color> <Color x:Key="BorderDarkColor">#FF444444</Color> <Color x:Key="PressedBorderLightColor">#FF888888</Color> <Color x:Key="PressedBorderDarkColor">#FF444444</Color> <Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color> <Color x:Key="DisabledBorderDarkColor">#FF888888</Color> <Color x:Key="DefaultBorderBrushDarkColor">Black</Color> <!--Control-specific resources.--> <Color x:Key="HeaderTopColor">#FFC5CBF9</Color> <Color x:Key="DatagridCurrentCellBorderColor">Black</Color> <Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color> <Color x:Key="NavButtonFrameColor">#FF3843C4</Color> <LinearGradientBrush x:Key="MenuPopupBrush" EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="{DynamicResource ControlLightColor}" Offset="0" /> <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="0.5" /> <GradientStop Color="{DynamicResource ControlLightColor}" Offset="1" /> </LinearGradientBrush> <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill" StartPoint="0,0" EndPoint="1,0"> <LinearGradientBrush.GradientStops> <GradientStopCollection> <GradientStop Color="#000000FF" Offset="0" /> <GradientStop Color="#600000FF" Offset="0.4" /> <GradientStop Color="#600000FF" Offset="0.6" /> <GradientStop Color="#000000FF" Offset="1" /> </GradientStopCollection> </LinearGradientBrush.GradientStops> </LinearGradientBrush> <Style x:Key="{x:Type ListBox}" TargetType="ListBox"> <Setter Property="SnapsToDevicePixels" Value="true" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="ScrollViewer.CanContentScroll" Value="true" /> <Setter Property="MinWidth" Value="120" /> <Setter Property="MinHeight" Value="95" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListBox"> <!-- This is the meat of the template --> <Grid> <Image Stretch="Fill" Source="/WpfApplication2;component/Cloud.png" /> <StackPanel Margin="2" Background="Transparent" IsItemsHost="True" /> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="false"> </Trigger> <Trigger Property="IsGrouping" Value="true"> <Setter Property="ScrollViewer.CanContentScroll" Value="false" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid Background="Azure"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid VerticalAlignment="Top" HorizontalAlignment="Left" Width="Auto" Height="Auto"> <ListBox x:Name="ListBox1" VerticalAlignment="Top" HorizontalAlignment="left" Height="Auto" Width="Auto" Background="Red" > </ListBox> </Grid> </Grid> </Window> 

내가 와서이 MSDN page을 참조 : 여기
이 모든 일을 할 수있는 스타일/템플릿 방법이다 (당신은 정확하게 당신이 원하는 방법을 보이도록 조정할 필요합니다) (블렌드가 설치되지 않았기 때문에) 이걸로.

+0

흠 그 문제는 내 listBox의 내용이 동적이므로 내용에 따라 listBox의 autoSize를하고 싶습니다. – Ben

+0

당신은 여전히 ​​그 일을 할 수 있습니다 ... 당신이 클라우드의 이미지를 담고있는 같은 컨테이너에서 동적으로 확장하는 목록 상자 부분을 얻는 한, 구름을 잘 늘려야합니다 (나는 구름을위한 SVG 이미지를 제안하여 그 시나리오에서 잘 확장 될 것입니다). – RQDQ

+0

-1 이것은 최종 목표의 작은 부분으로 어떤 식 으로든 템플릿 구성 요소를 처리하지 않습니다. –