XAML에서 열거형을 사용하려면 어떻게 해야 합니까?
WPF를 배우고 있는데 다음 문제가 발생했습니다.
XAML이 아닌 다른 네임스페이스에 열거형이 있습니다.
public enum NodeType
{
Type_SYSTEM = 1, // System
Type_DB = 2, // Database
Type_ROOT = 512, // Root folder
Type_FOLDER = 1024, // Folder
}
내 XAML에서 정수로 이미지를 트리거하고 싶다
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="{NodeType: }">
<Setter Property="Source" Value="/Images/DB.PNG"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="128">
<Setter Property="Source" Value="/Images/SERVER.PNG"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
XAML 코드에서 직접 정수값을 가져와 열거형과 비교할 수 있는 방법이 있습니까?
내 열거형은 네임스페이스에 있습니다.AnotherNamespace.Types
<DataTrigger Binding="{Binding IntegerType}" Value="MyEnumType.Type_DB">
<Setter Property="Source" Value="/Images/SERVER.PNG"/>
</DataTrigger>
여기서도 같은 질문이 있었습니다.최종적인 결과는 IValue Converter를 만드는 것이었습니다.이 IValue Converter는 이 IValue Converter에 합격했습니다.enum
가치관으로서 매치하고 싶었던 것ConverterParameter
, 그리고 그것은 반환된다.true
또는false
바인딩된 값이 에 일치하는지 여부에 따라(int)
Enum 값입니다.
최종 결과는 다음과 같습니다.
XAML 코드:
<DataTrigger Value="True"
Binding="{Binding SomeIntValue,
Converter={StaticResource IsIntEqualEnumConverter},
ConverterParameter={x:Static local:NodeType.Type_DB}}">
컨버터
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (parameter == null || value == null) return false;
if (parameter.GetType().IsEnum && value is int)
{
return (int)parameter == (int)value;
}
return false;
}
네임스페이스가 XAML 헤더에 포함되어 있는지 확인하기만 하면 커스텀 DP와 열거값을 마크업으로 직접 참조할 수 있습니다.
예를 들어 이 코드를 사용하여 이 작업을 수행합니다.
<DataTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="True" />
<Condition Binding="{Binding Type}" Value="{x:Static loc:AppProfileItemType.Custom}" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter TargetName="PART_Delete" Property="Visibility" Value="{x:Static Visibility.Visible}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</DataTemplate.Triggers>
DataTrigger에 Style로 액세스할 수 없으므로 대신 DataTemplate 또는 ControlTemplate를 만들어야 합니다(단, ).NET 4는 스타일에서 트리거를 설정하는 기능을 추가합니다).다음과 같은 스타일에서 ControlTemplate를 재지정할 수 있습니다.
<Style x:Key="MyCustomButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ContentPresenter />
<ControlTemplate.Triggers>
<!-- Put your DataTriggers here -->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
객체에 바인딩을 하는 DataTemplate의 경우 ContentPresenter를 사용하여 객체의 표시에 사용할 DataTemplate 정의와 함께 표시할 객체에 콘텐츠를 설정할 수 있습니다.DataTrigger를 사용하는 방법은 항상 있지만 스타일을 사용하는 것만큼 직접적이거나 간단하지는 않습니다.
인생을 그렇게 복잡하게 만들 필요는 없어요.Enum은 문자열로 쉽게 변환할 수 있으므로 이 문자열 값을 tirger에서 사용할 수 있습니다.
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="Type_DB">
<Setter Property="Source" Value="/Images/DB.PNG"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="Type_SERVER">
<Setter Property="Source" Value="/Images/SERVER.PNG"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
그러나 int 값을 열거형에 저장하면...다음 사항을 할당할 수 있습니다.
NodeType val = (NodeType)619;
그럼... 네...변환기를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/14279602/how-can-i-use-enum-types-in-xaml
'prosource' 카테고리의 다른 글
스택 패널에 ScrollBar를 추가하는 방법 (0) | 2023.04.18 |
---|---|
Safari에서 열린 UI Web View 링크 (0) | 2023.04.18 |
컬을 사용할 때 지퍼가 달린 페이지를 적절하게 처리하는 방법 (0) | 2023.04.18 |
'시스템에 가치를 부여합니다.창문들.Baml2006년TypeConverterMarkupExtension'이 예외를 발생시켰습니다.' (0) | 2023.04.18 |
경고: 끊어진 참조/리모트/원점/헤드 무시 (0) | 2023.04.18 |