문제

아코디언을 사용하여 우리가 구축하는 LOB 응용 프로그램에 총계를 표시해야합니다.

아코디언을 XAML에 배치하면 모든 것이 잘 작동하며 아이콘 상태 (>)가 정확하고 오른쪽을 가리키고 있습니다. 아코디언에 들어가는 마우스에서 ~ 아니다 시각적 상태 변화가 있습니다.

버튼에 아코디언스를 동적으로 추가하면 (비동기 데이터 통화 반환을 시뮬레이션하려면) 아이콘 상태는 동일하지 않으며 마우스 센터에서 시각적 상태 변경을 실행하여 자체를 "수정합니다. *"3 개의 아코디언 항목 추가"를 두 번 클릭해야 할 수도 있습니다.

아코디언 템으로 클릭 한 버튼에 아코디언을 동적으로 추가하면 잘 작동합니다. 아래는 내 샘플 응용 프로그램입니다.

그렇다면 런타임에 아코디언을 추가하고 XAML을 사용할 때와 같이 올바른 상태에있게하려면 어떻게해야합니까?

XAML

 <Grid x:Name="LayoutRoot" Background="Black" >
  <StackPanel x:Name="TheStackPanel">
     <Button Content="Create Accordion" Click="CreateAccordionItems"></Button>
     <Button Content="Add 3 Accordion Items" Click="AddAccordionItems"></Button>
     <Grid Background="Pink">
        <layoutToolkit:Accordion SelectionMode="ZeroOrMore" x:Name="TestAccordion" Margin="10,10,10,10" HorizontalAlignment="Stretch"  >
           <layoutToolkit:AccordionItem Content="Content - 1" Header="Header - 1">
           </layoutToolkit:AccordionItem>
           <layoutToolkit:AccordionItem Content="Content - 2" Header="Header - 2">
           </layoutToolkit:AccordionItem>
           <layoutToolkit:AccordionItem Content="Content - 3" Header="Header - 3">
           </layoutToolkit:AccordionItem>
        </layoutToolkit:Accordion>
     </Grid>
  </StackPanel>

 public partial class MainPage : UserControl

{private int count = 0; public mainpage () {// 변수 초기화 initializecomponent (); //testaccordion.expandDirection = ExpandDirection.Down; }

  private void AddAccordionItems( object sender, RoutedEventArgs e )
  {
     AddToAccordion( 3, TestAccordion );
  }

  private void AddToAccordion( int size, Accordion _Accordion )
  {
     for( int i = 0; i < size; i++ )
     {
        AccordionItem accordionItem = new AccordionItem( );
        accordionItem.Header = "Item " + count.ToString( );
        count++;
        _Accordion.Items.Add( accordionItem );
        Grid aGrid = new Grid( );
        TextBlock tb = new TextBlock( );
        tb.Text = accordionItem.Header as string;
        aGrid.Children.Add( tb );
        accordionItem.Content = aGrid;
        //accordionItem.IsEnabled = true;
        accordionItem.IsSelected = true;
     }
  }

  private void CreateAccordionItems( object sender, RoutedEventArgs e )
  {
     Accordion accordion = new Accordion( );
     accordion.HorizontalContentAlignment = HorizontalAlignment.Stretch;
     TheStackPanel.Children.Add( accordion );
     AddToAccordion( 10, accordion );
  }

}

도움이 되었습니까?

해결책

rectaccordion.updatelayout (); 항목을 추가 한 후 ...

다른 팁

Accordian Control의 소스 코드를 살펴보면 interactionHelper.upDateVisualState를 사용하여 이벤트 후 올바른 상태를 설정합니다.

public void UpdateVisualStateBase(bool useTransitions)
{
    if (!this.Control.IsEnabled)
    {
        VisualStates.GoToState(this.Control, useTransitions, new string[] { "Disabled", "Normal" });
    }
    else if (this.IsReadOnly)
    {
        VisualStates.GoToState(this.Control, useTransitions, new string[] { "ReadOnly", "Normal" });
    }
    else if (this.IsPressed)
    {
        VisualStates.GoToState(this.Control, useTransitions, new string[] { "Pressed", "MouseOver", "Normal" });
    }
    else if (this.IsMouseOver)
    {
        VisualStates.GoToState(this.Control, useTransitions, new string[] { "MouseOver", "Normal" });
    }
    else
    {
        VisualStates.GoToState(this.Control, useTransitions, new string[] { "Normal" });
    }
    if (this.IsFocused)
    {
        VisualStates.GoToState(this.Control, useTransitions, new string[] { "Focused", "Unfocused" });
    }
    else
    {
        VisualStates.GoToState(this.Control, useTransitions, new string[] { "Unfocused" });
    }
}

이 방법은 Accordian Control에서 내부로 표시되고 InteractionHelper는 개인 변수이므로 가장 좋은 방법은 제어를 추가하는 상태를 파악한 다음 해당 상태로 이동하도록 지시하는 것입니다 (전환없이 해당 상태로 이동하도록하십시오. ) 시각적 트리에 그것을 추가하기 전에. 이것이 마우스 오버가 "고정"하는 이유입니다.

AccorDian 항목을 관측형 수집에 바인딩 할 수 있습니까?

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