몇 달 전에 C# 응용 프로그램에서 ListBox를 일부 UserPanels의 컨테이너로 사용하기 시작했습니다. 패널이 선택되면 목록 상자 항목과 마찬가지로 강조 표시됩니다. 나는 (내가 원래이 발견 또는 내가 그것을 링크 할 위치를 확실하지 않음)이 잘 작동명명 된 스타일 간 변경
<Application.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="border" Background="Transparent">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="border" Property="Background">
<Setter.Value>Transparent</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
하지만 지금은 가끔이 필요합니다 내가 모든 항목을 투명한 배경을 제공하기 위해 추가 할 수 있었다 다음 XAML을 발견 배경색 대신 투명 한 배경색. 목록 상자가 하나 뿐이므로 코드 비헤이비어에서 스타일을 프로그래밍 방식으로 변경하려고합니다.
코드에서 스타일을 변경하는 예를 발견했지만이 두 가지 스타일을 만들 수 없습니다. 나는 그것에게 도끼를 주었다 : name = "transparentListbox", 그것을 복사하고 다른 한 x : name = "normalListbox"Blue의 배경을 주었다. 그러나 두 가지 스타일 요소가있는 XML 구문 분석 예외를 얻는다. 일반적으로 모든 목록 상자를 수정하려고합니다.
필요에 따라 코드를 전환 할 수있는 동일한 작업 (항목을 선택하면 배경 수정)을 수행하는 두 개의 명명 된 스타일을 어떻게 가질 수 있습니까?
편집 : 내 목록 상자가 UserPanels를 저장하는 데 사용되는 모든 경우에
. lstPanels.Items.Add (p)를 사용하여 목록 상자에 추가합니다. 여기서 p는 UserPanel에서 파생 된 클래스의 인스턴스입니다.
처음으로 응용 프로그램을 만들 때 투명도가 필요한 창에이 스타일이 적용되고 항목을 선택해야하는 창이 없었습니다. 여러 창을 관리하는 것이 번거로워 져서 하나의 창에 다시 팩터 리되었으며 목록 상자가 지워지고 모드가 변경 될 때 여러 유형의 패널이로드됩니다. 일부는 여전히 투명한 배경이 필요했지만 지금은 그렇지 않습니다.
프로그래밍 방식으로 전체적으로 목록 상자에 명명 된 스타일을 지정하면 모드가 변경 될 때 괜찮습니다. 모든 ListBoxItem에 스타일을 할당하려면 해당 기능이 퍼져 나감에 따라 많은 코드가 업데이트되어야합니다.
아마도 해결책은 단일 스타일을 유지하는 것이지만 가능하다면 배경 속성을 가변적으로 바인딩하는 것일까 요?
키 "StandardListboxItem"을 추가하고 두 스타일을 응용 프로그램의 리소스 대신 내 창 리소스로 옮긴 다음이 줄을 사용했습니다. lstPanels.Style = (Style) FindResource ("StandardListboxItem"); 내부 예외로 XMLParse 예외가 throw됩니다. { " ''ListBoxItem 'TargetType이'ListBox '요소 유형과 일치하지 않습니다.'} 아이디어가 있으십니까? – Eric
ListBoxItem이 아닌 ListBox에 스타일을 적용하고 있습니다. 아이템을 반복하고 스타일을 변경해야 할 수도 있습니다. –
조금 성 가시고 있습니다. 응용 프로그램이 모드를 변경하는 단일 지점에서 목록 상자에 스타일을 적용하는 것이 한 가지이지만 각 항목의 개별 스타일을 관리하는 것은 약간의 고통입니다. – Eric