WPF 팁

RadioButton ListBox 샘플 이재웅 평점: 10.0/10 (1명 참여) 조회: 3214

 안녕하세요~
WPF Radio 버튼을 listBoxItem처럼 사용하는 방법에 대한 기본 샘플입니다.

스터디 하면서 만들었는데 함께 공유드립니다. 설명은 좀 부족하지만 틈틈히 채워나갈 예정입니다.
첨부한 소스코드를 참고해주세요!

아래는 프로그램 실행 이미지입니다. 
리스트박스 안에 있는 Radio버튼을 체크(IsChecked)했을 때 이미 ListBoxItem의 IsSelected와 바인딩 연결을 해 두었기 때문에 라디오버튼 체크만으로도 리스트박스의 SelectedItem이 채워지는 것을 확인 할 수 있습니다.



윈도우 전체 배경과 중앙의 색상명은 ListBox SelectedItem 값과 바인딩 되어있습니다.

ListBoxItem Binding 'AncestorType'

처음에 언급한 것 처럼 라디오 버튼의 IsChecked 속성과 ListBoxItem의 IsSelected의 연결점을 위한 바인딩은 아래와 같습니다.
 

<Style TargetType="ListBoxItem" x:Key="LBXITEM_RADIO">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Border BorderBrush="#444444" 
                        BorderThickness="1" CornerRadius="3"
                        Margin="3" Padding="12"
                        Background="{Binding Color}">
                    <RadioButton GroupName="MYRADIO"
                                    IsChecked="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"
                                    Content="{Binding DisplayName}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
 

IsChecked="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"
앞으로 라디오 버튼이 체크될 때 마다 리스트박스 아이템의 IsSelected 또한 변경될 것이며 IsSelected 값의 변경시에도 물론 변경될 겁니다.

다음은 윈도우 배경을 SelectedItem의 Color 값으로 바인딩한 부분입니다.
 

<Window Background="{Binding ElementName=lb, Path=SelectedItem.Color}" ...

마찬가지로 화면 중앙 색상 텍스트 바인딩 부분입니다.

<TextBlock Text="{Binding ElementName=lb, Path=SelectedItem.DisplayName}" ...


Data Model


데이터모델은 색상(Color)과 색상명(DisplayName)으로 구성되어있습니다.
 

internal class MyData
{
    public MyData()
    {
    }

    public string Color { get; set; }
    public string DisplayName { get; set; }

    internal static List SampleData()
    {
        var source = new List();
        source.Add(new MyData { Color = "#99b433", DisplayName = "Light Green" });
        source.Add(new MyData { Color = "#00a300", DisplayName = "Green" });
        source.Add(new MyData { Color = "#1e7145", DisplayName = "Dark Green" });
        source.Add(new MyData { Color = "#ff0097", DisplayName = "Magenta" });
        source.Add(new MyData { Color = "#9f00a7", DisplayName = "Light Purple" });
        source.Add(new MyData { Color = "#7e3878", DisplayName = "Purple" });
        source.Add(new MyData { Color = "#603cba", DisplayName = "Dark Purple" });
        return source;
    }
}
TBD...

 

태그 : AncestorType c# radiobutton relativesource wpf
작성자 정보
이재웅
Level 16
 [EXP.50/70]

메일:  비공개

글등록 +12 156 덧글등록 +3 90
자기소개
안녕하세요. 저는 이재웅이라고합니다. ijaeawung@naver.com
글 공유하기 |
  tweet facebook
2015-11-09 오전 10:29:27
나도한마디
태그로 엮인글
[C#.NET Q&A] "X"버튼을 누르고 메세지박스 예 누르면 종료되지 않는 문제가 있습니다.[1]+1  성단See
[C#.NET Q&A] WPF UI visiable 변경시 끊김현상 질문  썬콩콩
[구인&교육정보] [기흥] 관리시스템) C# 중급 개발자 모집(3월초)  인텍솔루션(주)
[구인&교육정보] [방배역인근] 운영) C#.NET 초급 유지보수 모집(즉시)  인텍솔루션(주)
[C#.NET Q&A] 비주얼 스튜디오에서 닷넷 종류에 따라 인텔리센스 MSDN이 영문으로 나옵니다  천9
[C#.NET Q&A] c# Soap 통신 질문한번 더 드립니다.  썬콩콩
[C#.NET Q&A] WPF 사용하여 Excel Export 관련 질문드립니다.[2]  미야
[C#.NET Q&A] c# Soap 통신 질문입니다.[1]+1  썬콩콩
[C#.NET Q&A] System.Drawing.Image 객체의 IsDisposed 여부 확인방법이 있나요?  최광섭
[C#.NET Q&A] c# Colordialog에 버튼 추가 하는방법[1]  SOS1324