개행시 를 사용
<TextBlock Text="Test Group"/>
[결과]
Test
Group
XAML 에서 소수점 숫자를 3자리 까지만 표현하고자 할 때 아래처럼 사용하면 된다.
<TextBlock Text="{Binding Number, StringFormat={}Y:{0:0.###}}" /> |
Number : 56.235487
결과
Y:56.235
Property 중 특정 두 값이 조건에 해당 되는 경우 처리를 위해서는 MiltiDataTrigger 를 사용합니다.
아래는 StringData1 속성의 값이 "Data1" 이고 StringData2 값이 "Data2" 인경우
Grid 를 숨기는(Visibility=Collapsed) 처리를 합니다.
<Grid> <Grid.Style> <Style TargetType="Grid"> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding StringData1}" Value="Data1"/> <Condition Binding="{Binding StringData2}" Value="Data2"/> </MultiDataTrigger.Conditions> <Setter Property="Visibility" Value="Collapsed"/> </MultiDataTrigger> </Style.Triggers> </Style> </Grid.Style> </Grid> |
MultiDataTrigger 는 And 조건을 처리하고
OR 조건은 DataTrigger 를 두개 사용하여 처리합니다.
아래는 StringData(string) Property 에 null, 공백여부 두가지를 or 조건으로 처리한 내용입니다.
<DataTrigger Binding="{Binding StringData}" Value="{x:Null}"> <Setter Property="Visibility" Value="Hidden" /> </DataTrigger> <DataTrigger Binding="{Binding StringData}" Value="{x:Static System:String.Empty}" > <Setter Property="Visibility" Value="Hidden" /> </DataTrigger> |
ListView 내부의 Button 클릭시
해당 버튼이 속해있는 Item 을 가져오는 방법입니다.
private void DeleteButton_Click(object sender, RoutedEventArgs e) { var listViewItem = (ListViewItem)listView.ItemContainerGenerator.ContainerFromItem(((Button)sender).DataContext); TestItemModel testItemModel = listViewItem.Content as TestItemModel; } |
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
선택한 항목에 대해서 표시를 하고 싶지 않을 때 사용합니다.
* 선택에 대한 이벤트도 타지 않으니 단순 표시를 위해서만 사용합니다.
<ListView ItemsSource="{Binding .}"> <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"></StackPanel> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <Button Content="{Binding IndexNumber}" Width="20"/> </DataTemplate> </ListView.ItemTemplate> </ListView> |
버튼을 가로로 나타낸다.
<ItemsControl ItemsSource="{Binding.}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"></StackPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Button Content="{Binding IndexNumber}" Width="20"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> |
ItemsPanel 의 ItemsPanelTemplate 을 이용해서 정렬 기준을 정할 수 있다.
하나의 Grid 안에서 두개의 사각형이 있는 경우 이를 서로 영향받을수 있도록 처리하기 위해서 DataDataTrigger 를 이용하면된다.
아래 예시는 하나의 사각형에 마우스가 간 경우 다른 하나의 사각형 컨트롤이 숨겨져있다가 보여지는 처리를 한것이다
<Window x:Class="WpfAppControlTest.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfAppControlTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Rectangle x:Name="B" Grid.Column="0" Fill="Green" Width="100" Height="100"/>
<Rectangle x:Name="C" Grid.Column="1" Fill="Yellow" Width="100" Height="100">
<Rectangle.Style>
<Style TargetType="Rectangle">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=B,Path=IsMouseOver}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
</Grid>
</Window>
Grid 의 Trigger 을 통해 처리하는 것을 불가능하며 위 처럼 영향 받고자 하는 컨트롤에 처리를 해주어야한다.
참고 : stackoverflow.com/questions/4208731/create-a-simple-wpf-trigger-on-one-object-that-affects-another

<Window x:Class="WpfAppControlTest.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfAppControlTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style x:Key="Flat">
<Setter Property="Control.Background" Value="{x:Null}" />
<!--<Setter Property="Control.BorderBrush" Value="{x:Null}" />-->
<Style.Triggers>
<Trigger Property="Control.IsMouseOver" Value="True">
<Setter Property="Control.Background" Value="{x:Null}" />
<!--<Setter Property="Control.BorderBrush" Value="{x:Null}" />-->
<Setter Property="Control.FontWeight" Value="Bold" />
</Trigger>
<Trigger Property="Control.IsFocused" Value="True">
<Setter Property="Control.FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<Button Style="{StaticResource Flat}" Width="100">Hello</Button>
</StackPanel>
</Window>
테두리도 보기 싫다면 주석 되있는 내용을 주석처리를 풀면된다.

컨트롤의 Background 를 Transparent 로 하게되면
해당 컨트롤 뒤쪽에 배치된 컨트롤들에 마우스 오버이벤트나 툴팁처리를 한경우 작동하지 않게됩니다.
하지만 Background 를 {x:Null} 로 지정하게되면
뒤쪽에 배치된 컨트롤들의 이벤트 처리가 가능해 집니다.
아래처럼 {x:Null} 로 된 경우 ToolTip 이 제대로 표시되지만
<Grid>
<Label Content="null 과 transoarent" ToolTip="ToolTip!!" Height="30" Width="300"/>
<Border Name="Button1" Height="30" Width="300" BorderBrush="Yellow" Background="{x:Null}" BorderThickness="1"/>
</Grid>

아래처럼 Transparent 로 된 경우 ToolTip 이 표시되지 않습니다.
<Grid>
<Label Content="null 과 transoarent" ToolTip="ToolTip!!" Height="30" Width="300"/>
<Border Name="Button1" Height="30" Width="300" BorderBrush="Yellow" Background="Transparent" BorderThickness="1"/>
</Grid>
