WPF์์ ComboBox๋ฅผ ์ฌ์ฉํ ๋, Enum ๊ฐ์ ๋ฐ์ธ๋ฉํ์ฌ ํญ๋ชฉ์ ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ํํฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ๋คํธ์ํฌ ์ค์ ํ๋ฉด์ ์์๋ก ๋ค์ด, ComboBox์ ์์ดํ ์ค ํน์ ํญ๋ชฉ์๋ง ํดํ์ ํ์ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.

์๋๋ฆฌ์ค
- ์ฌ์ฉ์๋
LAN,WiFi,VPN์ค ํ๋์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฐฉ์์ ์ ํํ ์ ์์ต๋๋ค. - ์ด ์ค VPN์ ๋ณด์ ์ฐ๊ฒฐ์ด ํ์ํ๋ฏ๋ก, ํดํ์ ํตํด ์ด๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ดํด์ผ ํฉ๋๋ค.
- ๋ค๋ฅธ ํญ๋ชฉ์๋ ํดํ์ ํ์ํ์ง ์์ต๋๋ค. VPN ํญ๋ชฉ์ ๋ง์ฐ์ค๊ฐ ์ฌ๋ผ๊ฐ์ ๋๋ง ํดํ์ ํ์ํด์ผ ํฉ๋๋ค.
1. Enum ์ ์
๋จผ์ ์ฐ๊ฒฐ ๋ฐฉ์์ ๋ํ Enum์ ์ ์ํฉ๋๋ค.
public enum ConnectionType
{
LAN,
WiFi,
VPN
}2. ํดํ ์ปจ๋ฒํฐ ๊ตฌํ
ํดํ์ ์กฐ๊ฑด๋ถ๋ก ๋ฐํํ๋ IValueConverter๋ฅผ ๊ตฌํํฉ๋๋ค.
VPN์ผ ๊ฒฝ์ฐ์๋ง ๋ฌธ์์ด์ ๋ฐํํ๊ณ , ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ null์ ๋ฐํํ์ฌ ํดํ์ด ๋ํ๋์ง ์๋๋ก ํฉ๋๋ค.
public class ConnectionTooltipConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is ConnectionType type)
{
return type == ConnectionType.VPN ? "๋ณด์ ์ฐ๊ฒฐ ํ์" : null;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
=> throw new NotImplementedException();
public override object ProvideValue(IServiceProvider serviceProvider)
=> this;
}์ด ์ปจ๋ฒํฐ๋ XAML์์๋ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก MarkupExtension์ ์์๋ฐ์ ๊ตฌํ๋์ด ์์ต๋๋ค.
3. XAML์์ ComboBox ๊ตฌ์ฑ
ComboBox์ Enum์ ๋ฐ์ธ๋ฉํ๊ณ , ๊ฐ ํญ๋ชฉ๋ง๋ค ํดํ์ ์ค์ ํ ์ ์๋๋ก ItemContainerStyle์ ์ฌ์ฉํฉ๋๋ค.
<ComboBox Height="20" Width="100" ItemsSource="{Binding ConnectionTypes, ElementName=wTest}" SelectedIndex="0">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="ToolTip" Value="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={local:ConnectionTooltipConverter}}"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>์ฌ๊ธฐ์ ConnectionTypes๋ ConnectionType Enum์ ๊ฐ๋ค์ ๋ฐ์ธ๋ฉํ ์ปฌ๋ ์
์
๋๋ค.
์ ๋ ์์ ์ฝ๋๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ผ DependencyProperty๋ก ์๋์ฐ ๋ด๋ถ์ ์ ์ธํ์์ง๋ง,
๋ณธ์ธ ์ํฉ์ ๋ฐ๋ผ ObjectDataProvider๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ทฐ๋ชจ๋ธ์์ ์ง์ ์ ๊ณตํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ฉด ๋ฉ๋๋ค.
public IEnumerable<ConnectionType> ConnectionTypes
{
get { return (IEnumerable<ConnectionType>)GetValue(ConnectionTypeProperty); }
set { SetValue(ConnectionTypeProperty, value); }
}
public static readonly DependencyProperty ConnectionTypeProperty =
DependencyProperty.Register(nameof(ConnectionTypes), typeof(IEnumerable<ConnectionType>), typeof(TestDialog), new PropertyMetadata(null));
public TestDialog(WindowPosition windowPosition)
{
windowPosition.Apply(this);
InitializeComponent();
ConnectionTypes = Enum.GetValues(typeof(ConnectionType)).Cast<ConnectionType>();
}๋ํ, DevExpress๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ dxe:EnumItemsSource๋ฅผ ํ์ฉํ์ฌ Enum์ ๋ฐ๋ก ๋ฐ์ธ๋ฉํ ์ ์์ต๋๋ค.
4. ์ ๋ฆฌ
ItemContainerStyle์ ์ฌ์ฉํ๋ฉด ComboBox์ ํญ๋ชฉ๋ง๋ค ๊ฐ๋ณ์ ์ธ ์คํ์ผ์ ์ง์ ํ ์ ์์ต๋๋ค.ValueConverter๋ฅผ ํตํด ํน์ ํญ๋ชฉ์๋ง ์กฐ๊ฑด๋ถ๋ก ํดํ์ ํ์ํ ์ ์์ต๋๋ค.- ์ด ๋ฐฉ์์ ํ์ฅํด์ Tooltip ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์คํ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค.
'๐ฅ๏ธ > Windows WPF' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [WPF DevExpress] GridControl์ด ํ์ ๊ฐ์ฒด ์์ฑ ๋ณ๊ฒฝ์ด UI์ ๋ฐ์๋์ง ์์ ๋ ํด๊ฒฐ๋ฐฉ๋ฒ (0) | 2025.04.12 |
|---|---|
| [WPF] WPF TextTrimming์ด ๊ฐ๋ฅํ ์กฐ๊ฑด (0) | 2023.10.31 |
| [WPF] e.Handled = true; (0) | 2023.10.16 |