الأكورديون البند لا في دولة البصرية الصحيحة

StackOverflow https://stackoverflow.com/questions/1628557

  •  06-07-2019
  •  | 
  •  

سؤال

ولست بحاجة لاستخدام الأكورديون لعرض بعض المجاميع على تطبيق LOB نبنيه.

إذا أضع الأكورديون في XAML كل يعمل بشكل جيد وحالة الرمز (>) هو الصحيح والإشارة إلى اليمين. على الماوس دخول AccordionItem نفعل <م> لا يملك تغيير حالة البصرية.

إذا كنت حيوي إضافة AccordionItems على زر اضغط (لمحاكاة طلب البيانات المتزامن العودة) حالة رمز ليست هي نفسها وعلى MouseEnter أنه "يصحح" نفسه من خلال تنفيذ تغيير حالة البصرية. * قد تحتاج إلى النقر فوق "إضافة 3 الأصناف الأكورديون" مرتين.

إذا كنت حيوي إضافة الأكورديون على بنقرة زر مع AccordionItems أنه يعمل بشكل جيد. فيما يلي بلدي عينة التطبيق.

وهكذا ما يمكنني القيام به للحصول على الأكورديون لإضافة AcordionItems في وقت التشغيل ويكون في الحالة الصحيحة وفقا عند استخدام 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

{       خاص العد كثافة العمليات = 0؛   مشارك تحميل الصفحة العامة ()   {    // المطلوبة لتهيئة المتغيرات    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 );
  }

و}

هل كانت مفيدة؟

المحلول

والدعوة TestAccordion.UpdateLayout ()؛ بعد إضافة العناصر ... قد يكون

نصائح أخرى

إذا كنت تأخذ نظرة على الكود لسيطرة Accordian سترى أنه يستخدم 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 وInteractionHelper هو متغير الخاص، وأفضل رهان هو لمعرفة أي من الدول التي تقوم بإضافة عنصر التحكم في ومن ثم نقول للسيطرة على الذهاب إلى تلك الدولة ( دون انتقال) قبل addig إلى شجرة البصرية. هذا هو السبب في أن فأر هو "إصلاح" عليه.

ويمكنك ربط الأكورديون الأصناف إلى ObservableCollection؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top