Мне нужно использовать Аккордеон, чтобы отобразить некоторые итоги в приложении 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
{
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 );
}
* *} Тысяча двадцать-один