WPF Control
Data Grid
<DataGrid ItemsSource="{Binding ListSceCommand}" Margin="3" BorderThickness="1" CanUserSortColumns="False"
AutoGenerateColumns="False" SelectionMode="Single" SelectedItem="{Binding SelectedCommand}" HorizontalScrollBarVisibility="Auto"
IsReadOnly="True" ColumnWidth="Auto" Grid.RowSpan="1" Grid.ColumnSpan="3">
- CanUserSortColumns : column 클릭 시 정렬 기능 on/off
- AutoGenerateColumns : ItemSource의 내용 자동 추가?
- BorderThickness : 테두리
- ColumnWidth : 크기 Auto
- IsReadOnly : 읽기 전용
- HorizontalScrollBarVisibility : 스크롤바 Auto
ScrollViewer
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<StackPanel Orientation="Horizontal">
- StackPanel에 scroll 추가 필요 시 사용 가능
StackPanel
<StackPanel Orientation="Horizontal">
WindowsFormsHost
- .Net Framework 라이브러리 프로젝트인 경우
- WindowsFormsIntegration, System.Windows.Forms 참조 추가 시 사용 가능
- Form Host 시 ControlBox False 및 Text "" 값으로 세팅하면 컨트롤박스 안보이게 가능
| code behind |
xaml |
 |
 |
// ControlBox=fase, Text="" 사용하지 않고도 컨트롤박스 안보이게 가능.
editor.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
바인딩
Data Grid
-
CurrentPos을 주기적으로 GUI에 업데이트해야 할 경우
- Get으로 위치만 읽어오는 경우에는 프로퍼티 변경에 대한 이벤트가 발생하지 않음.
- 바인딩용 프로퍼티를 생성하여 Timer에 Get으로 읽어온 값을 넣어준다.
- 바인딩용 프로퍼티 생성 시 반드시 Set부분에 OnpropertyChange()를 추가해야함. (INotifyPropertyChanged 사용)
public double CurrentPos => motor.GetCurrentPos(info);
private double tempPos = 0;
public double UpdateCurrentPos
{
get => tempPos;
set
{
tempPos = value;
OnPropertyChanged("UpdateCurrentPos");
}
}
Convert 활용
- Background(Brush)에 bool값을 바인딩하여 true/false에 따라 Color가 바뀌는 UserControl 생성 시 Convert 활용
- 아래 StatusView의 ConvertColor는 DependencyProperty Brush
- Background값에 바로 Brush를 바인딩 할 경우, IPCom같은 Connect 이벤트에 IsConnect 변수가 ture로 변경 시 Brush의 Color값이 바뀌도록 구성했을때 DependencyObject 관련 에러 발생함. Convert로 처리 시 해결 가능.
<UserControl.Resources>
<viewmodel:BoolToColorConverter x:Key="boolConvert"/>
</UserControl.Resources>
<local:StatusView ConnectColor="{Binding IsConnect, Converter={StaticResource boolConvert}}" Margin="0,0,10,0"/>
MouseBinding
<Grid.InputBindings>
<MouseBinding Gesture="RightClick" Command="{Binding CommandRightClick}" CommandParameter="{Binding ElementName=CameraView}"/>
</Grid.InputBindings>
<Image x:Name="CameraView" Source="{Binding GrabImage}" Stretch="None"/>