문제

내 앱에는 세 가지 상태가있는 토글 버튼이 있습니다. "확인되지 않은", "점검"및 "이전에 사용 된". 사용자 가이 특정 화면에 오면 토글 버튼 중 일부는 "이전에 사용 된"상태에있어 작업이 수행 된 작업을 보여줍니다. 토글 버튼 (현재 상태에 관계없이)을 클릭하면 "확인 된"상태로 배치됩니다. 이 토글 버튼 중 하나만 확인할 수 있습니다. 다른 상태는 다른 색의 외부 빛으로 표시되거나 전혀 빛이 없습니다.

"확인 된"상태에 대한 외부 글로우를 설정하려면 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에 설정되지 않은 것에 영향을 미치지 않습니까?

도움이 되었습니까?

해결책

일단 설정하면 DropShadowEffectButton, 당신은 로컬 값을 설정하고 있습니다 Button'에스 Effect 속성, 그것은 a DependencyProperty (Button.EffectProperty). 로컬 값은 다음과 같이 지울 때까지 다른 가능한 값을 대체합니다.

button1.ClearValue( Button.EffectProperty );

그러나 이전에 설정되었고 아직 정리되지 않은 경우에도 명확하게해야하기 때문에 작업을 조금 더 복잡하게 만듭니다.

대신, 첨부 파동을 만들 수 있습니다 PreviouslyUsed 입력하기 위해 ToggleButtons와 사용 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 하나만 선택해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top