wpf 응용 프로그램이 처음로드 될 때 if 조건에 따라 단추의 스타일을 변경하고 싶습니다. if를 사용하여로드 된 애플리케이션에서 버튼의 한 스타일이 있고 다른 버튼의 스타일이있을 것입니다. Datatriggers 또는 MVVM 패턴을 사용하여이를 달성하는 방법.wpf mvvm에서 DataTriggers를 사용하는 경우를 기반으로 버튼 스타일을 변경하는 방법
친절히 제안 하시겠습니까?
감사합니다.
wpf 응용 프로그램이 처음로드 될 때 if 조건에 따라 단추의 스타일을 변경하고 싶습니다. if를 사용하여로드 된 애플리케이션에서 버튼의 한 스타일이 있고 다른 버튼의 스타일이있을 것입니다. Datatriggers 또는 MVVM 패턴을 사용하여이를 달성하는 방법.wpf mvvm에서 DataTriggers를 사용하는 경우를 기반으로 버튼 스타일을 변경하는 방법
친절히 제안 하시겠습니까?
감사합니다.
데이터 템플릿과 템플릿 선택기를 살펴보아야합니다. 여기에 내 코드에서 급하게 붙여 넣은 예제가 있습니다. 버튼에 즉시 적용 할 수는 없지만, 그 방법으로 당신을 도울 것입니다.
다음은 응용 프로그램 자원 xaml 파일의 내용입니다. 다음과 같이
<DataTemplate DataType="{x:Type viewmod:ProjectViewModel}">
<DataTemplate.Resources>
<DataTemplate x:Key="ProjectEditViewTemplate">
<view:ProjectEditView/>
</DataTemplate>
<DataTemplate x:Key="ServiceSelectionViewTemplate">
<view:ServiceSelectionView/>
</DataTemplate>
</DataTemplate.Resources>
<ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource ProjectViewModelTemplateSelector}" />
</DataTemplate>
ProjectViewModelTemplateSelector가 정의 :
public class ProjectViewModelTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is ViewModel.ProjectViewModel)
{
if ((item as ViewModel.ProjectViewModel).EditMode)
{
return element.FindResource("ProjectEditViewTemplate") as DataTemplate;
}
else
{
return element.FindResource("ServiceSelectionViewTemplate") as DataTemplate;
}
}
else
return base.SelectTemplate(item, container);
}
}
}
을 다른 방법으로, 만약 내가 뷰 모델의 변수에 따라 ProjectViewModel에 사용할보기를 결정하는 데 사용 DataTriggers를 사용하려면 다음을 사용할 수 있습니다.
<Button Command="{Binding SomeButtonCommand}" Content="Click Me!">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=NormalButtonMode, Mode=OneWay}" Value="True">
<Setter Property="Content" Value="This Button is in Normal Mode" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=NormalButtonMode, Mode=OneWay}" Value="False">
<Setter Property="Content" Value="This Button is in the Other Mode" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
그의 경우 ViewModel은 부울 속성 NormalButtonMode를 노출해야합니다. 이 예제에서는 버튼의 Content 속성 만 설정했지만 DataTrigger 내부에는 여러 Setter를 나열 할 수 있습니다. 이 스타일을 리소스 사전에 넣고 StaticResource를 사용하여 각 버튼에 링크 할 수도 있습니다. 그냥 각 ViewModel에 NormalButtonMode (또는 무엇이든) 속성을 노출시켜야합니다. 기본 클래스에 넣을 수도 있습니다.
Style.Setters
을 사용하여 기본값을 설정할 수 있습니다. 다른 결정된 조건의 경우 Style.Triggers
을 사용하십시오. 다른 경우처럼 작동합니다.
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=EditorWindow, Path=Category}" Value="R">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
<Style.Setters>
<Setter Property="Visibility" Value="Collapsed"/>
</Style.Setters>
</Style>
</TextBlock.Style>
이것은 내가 검색하는 것입니다. 감사! – psulek
도움 주셔서 감사합니다. – Tarun