wpf는 XAML이 아닌 코드에서 설정된 값에 영향을 미치는 트리거
문제
내 앱에는 세 가지 상태가있는 토글 버튼이 있습니다. "확인되지 않은", "점검"및 "이전에 사용 된". 사용자 가이 특정 화면에 오면 토글 버튼 중 일부는 "이전에 사용 된"상태에있어 작업이 수행 된 작업을 보여줍니다. 토글 버튼 (현재 상태에 관계없이)을 클릭하면 "확인 된"상태로 배치됩니다. 이 토글 버튼 중 하나만 확인할 수 있습니다. 다른 상태는 다른 색의 외부 빛으로 표시되거나 전혀 빛이 없습니다.
"확인 된"상태에 대한 외부 글로우를 설정하려면 ischecked euqals true에서 트리거를 사용합니다.
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="Salmon" BlurRadius="40" ShadowDepth="0" Opacity="1.0"></DropShadowEffect>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
"이전에 사용 된"상태의 경우 마크 업이 아닌 코드에 외부 글로우를 적용합니다. 목록에서 값을 확인 하여이 상태에있는 버튼이 수행되어야하는지 결정하기 때문에이 작업을 수행해야합니다.
if (mExistingViews.Contains(mViews[i].LocalizedName))
{
DropShadowEffect dse = new DropShadowEffect();
dse.ShadowDepth = 0;
dse.BlurRadius = 20;
dse.Opacity = 1.0;
dse.Color = Colors.Yellow;
mViewButtons[i].Effect = dse;
}
그러나 "이전에 사용 된"상태에서 토글 버튼을 클릭하면 트리거가 영향을 미치지 않는 것 같습니다. 외부 빛이 변하지 않습니다.
내가 뭘 잘못하고 있죠? 트리거가 XAML에 설정되지 않은 것에 영향을 미치지 않습니까?
해결책
일단 설정하면 DropShadowEffect
에 Button
, 당신은 로컬 값을 설정하고 있습니다 Button
'에스 Effect
속성, 그것은 a DependencyProperty
(Button.EffectProperty
). 로컬 값은 다음과 같이 지울 때까지 다른 가능한 값을 대체합니다.
button1.ClearValue( Button.EffectProperty );
그러나 이전에 설정되었고 아직 정리되지 않은 경우에도 명확하게해야하기 때문에 작업을 조금 더 복잡하게 만듭니다.
대신, 첨부 파동을 만들 수 있습니다 PreviouslyUsed
입력하기 위해 ToggleButton
s와 사용 Bindings
그래서 그들은 그들의 가치를 좀 더 자동으로 얻습니다. 그런 다음 트리거 에서이 AttachedProperty 값을 참조하면 한 번의 드롭 그림자가 있습니다. PreviouslyUsed
, 그리고 또 다른 IsChecked
.
당신이 연결해야 할 부분은 바인딩이고 아마도 IValueConverter
돌릴 어딘가 mViews[i].LocalizedName
a true
또는 false
~을 위한 PreviouslyUsed
.
불행히도, 나는 당신의 설정에 대해 충분히 알지 못합니다. mViews
그리고 그것에 대해 더 많은 조언을 제공합니다. 당신 의지 모르겠습니다 ToggleButtons
데이터 바인딩의 일부입니다. 나는 당신이 그 배열을 반복하는 것처럼 보이지 않는다고 생각합니다. 당신이 당신의 묶인 경우 mViews
객체 ItemsSource
a ListBox
, 예를 들어, 당신은 a를 만들 수 있습니다 DataTemplate
그것은 그것을 생성합니다 ToggleButtons
AttachedProperty가 이미 설치되어 있습니다. 그것은 또한 당신의 단순화 할 것입니다 IsChecked
해당 항목이 ListBox
, 그리고 그 다음 ListBox
하나만 선택해야합니다.