Work around crash by replacing ItemRepeater with ListView (#1058)
* Replace ItemRepeater with ListView * Allow animations * undo temp key change * Remove animation
This commit is contained in:
parent
2caea01c6f
commit
ebc57af203
@ -775,58 +775,88 @@
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
<mux:ItemsRepeaterScrollHost>
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
<mux:ItemsRepeater x:Name="EquationInputList"
|
||||
ItemsSource="{x:Bind Equations}"
|
||||
TabFocusNavigation="Local">
|
||||
<mux:ItemsRepeater.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:EquationViewModel">
|
||||
<controls:EquationTextBox x:Uid="EquationInputButton"
|
||||
Margin="1,0,1,2"
|
||||
Style="{StaticResource EquationTextBoxStyle}"
|
||||
DataContext="{x:Bind Mode=OneWay}"
|
||||
DataContextChanged="EquationTextBox_DataContextChanged"
|
||||
EquationButtonClicked="EquationTextBox_EquationButtonClicked"
|
||||
EquationButtonContentIndex="{x:Bind FunctionLabelIndex, Mode=OneWay}"
|
||||
EquationColor="{x:Bind local:EquationInputArea.ToSolidColorBrush(LineColor), Mode=OneWay}"
|
||||
EquationFormatRequested="EquationTextBox_EquationFormatRequested"
|
||||
EquationSubmitted="EquationTextBox_Submitted"
|
||||
GotFocus="EquationTextBox_GotFocus"
|
||||
HasError="{x:Bind GraphEquation.HasGraphError, Mode=OneWay}"
|
||||
IsAddEquationMode="{x:Bind IsLastItemInList, Mode=OneWay}"
|
||||
KeyGraphFeaturesButtonClicked="EquationTextBox_KeyGraphFeaturesButtonClicked"
|
||||
Loaded="EquationTextBox_Loaded"
|
||||
LostFocus="EquationTextBox_LostFocus"
|
||||
MathEquation="{x:Bind Expression, Mode=TwoWay}"
|
||||
RemoveButtonClicked="EquationTextBox_RemoveButtonClicked">
|
||||
<controls:EquationTextBox.ColorChooserFlyout>
|
||||
<Flyout x:Uid="ColorChooserFlyout" Placement="Bottom">
|
||||
<local:EquationStylePanelControl SelectedColor="{x:Bind LineColor, Mode=TwoWay}"/>
|
||||
</Flyout>
|
||||
</controls:EquationTextBox.ColorChooserFlyout>
|
||||
</controls:EquationTextBox>
|
||||
</DataTemplate>
|
||||
</mux:ItemsRepeater.ItemTemplate>
|
||||
</mux:ItemsRepeater>
|
||||
<StackPanel x:Name="VariableStackPanel" x:Load="{x:Bind local:EquationInputArea.ManageEditVariablesButtonLoaded(Variables.Size), Mode=OneWay}">
|
||||
<Rectangle Height="1"
|
||||
Margin="12"
|
||||
Fill="#33000000"/>
|
||||
<mux:ItemsRepeater ItemTemplate="{StaticResource VariableDataTemplate}"
|
||||
ItemsSource="{x:Bind Variables, Mode=OneWay}"
|
||||
TabFocusNavigation="Local">
|
||||
<mux:ItemsRepeater.Transitions>
|
||||
<TransitionCollection>
|
||||
<AddDeleteThemeTransition/>
|
||||
</TransitionCollection>
|
||||
</mux:ItemsRepeater.Transitions>
|
||||
</mux:ItemsRepeater>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
<!-- This ListView and the one below should be replacted by an ItemRepeater once https://github.com/microsoft/microsoft-ui-xaml/issues/2011 is fixed. -->
|
||||
<ListView x:Name="EquationInputList"
|
||||
IsItemClickEnabled="False"
|
||||
ItemsSource="{x:Bind Equations}"
|
||||
SelectionMode="None"
|
||||
TabFocusNavigation="Local">
|
||||
|
||||
</ScrollViewer>
|
||||
</mux:ItemsRepeaterScrollHost>
|
||||
<!-- Removes animations from the ListView Style. -->
|
||||
<ListView.Style>
|
||||
<Style TargetType="ListView">
|
||||
<Setter Property="ItemContainerTransitions">
|
||||
<Setter.Value>
|
||||
<TransitionCollection/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ListView.Style>
|
||||
|
||||
<ListView.ItemContainerStyle>
|
||||
<Style TargetType="ListViewItem">
|
||||
<Setter Property="IsTabStop" Value="False"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
||||
<Setter Property="Padding" Value="0"/>
|
||||
<Setter Property="Margin" Value="1,0,1,0"/>
|
||||
</Style>
|
||||
</ListView.ItemContainerStyle>
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:EquationViewModel">
|
||||
<controls:EquationTextBox x:Uid="EquationInputButton"
|
||||
Margin="1,0,1,2"
|
||||
Style="{StaticResource EquationTextBoxStyle}"
|
||||
DataContext="{x:Bind Mode=OneWay}"
|
||||
DataContextChanged="EquationTextBox_DataContextChanged"
|
||||
EquationButtonClicked="EquationTextBox_EquationButtonClicked"
|
||||
EquationButtonContentIndex="{x:Bind FunctionLabelIndex, Mode=OneWay}"
|
||||
EquationColor="{x:Bind local:EquationInputArea.ToSolidColorBrush(LineColor), Mode=OneWay}"
|
||||
EquationFormatRequested="EquationTextBox_EquationFormatRequested"
|
||||
EquationSubmitted="EquationTextBox_Submitted"
|
||||
GotFocus="EquationTextBox_GotFocus"
|
||||
HasError="{x:Bind GraphEquation.HasGraphError, Mode=OneWay}"
|
||||
IsAddEquationMode="{x:Bind IsLastItemInList, Mode=OneWay}"
|
||||
KeyGraphFeaturesButtonClicked="EquationTextBox_KeyGraphFeaturesButtonClicked"
|
||||
Loaded="EquationTextBox_Loaded"
|
||||
LostFocus="EquationTextBox_LostFocus"
|
||||
MathEquation="{x:Bind Expression, Mode=TwoWay}"
|
||||
RemoveButtonClicked="EquationTextBox_RemoveButtonClicked">
|
||||
<controls:EquationTextBox.ColorChooserFlyout>
|
||||
<Flyout x:Uid="ColorChooserFlyout" Placement="Bottom">
|
||||
<local:EquationStylePanelControl SelectedColor="{x:Bind LineColor, Mode=TwoWay}"/>
|
||||
</Flyout>
|
||||
</controls:EquationTextBox.ColorChooserFlyout>
|
||||
</controls:EquationTextBox>
|
||||
</DataTemplate>
|
||||
</ListView.ItemTemplate>
|
||||
</ListView>
|
||||
<StackPanel x:Name="VariableStackPanel" x:Load="{x:Bind local:EquationInputArea.ManageEditVariablesButtonLoaded(Variables.Size), Mode=OneWay}">
|
||||
<Rectangle Height="1"
|
||||
Margin="12"
|
||||
Fill="#33000000"/>
|
||||
<ListView IsItemClickEnabled="False"
|
||||
ItemTemplate="{StaticResource VariableDataTemplate}"
|
||||
ItemsSource="{x:Bind Variables, Mode=OneWay}"
|
||||
SelectionMode="None"
|
||||
TabFocusNavigation="Local">
|
||||
<ListView.ItemContainerStyle>
|
||||
<Style TargetType="ListViewItem">
|
||||
<Setter Property="IsTabStop" Value="False"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
||||
<Setter Property="Padding" Value="0"/>
|
||||
<Setter Property="Margin" Value="1,0,1,0"/>
|
||||
</Style>
|
||||
</ListView.ItemContainerStyle>
|
||||
<ListView.Transitions>
|
||||
<TransitionCollection>
|
||||
<AddDeleteThemeTransition/>
|
||||
</TransitionCollection>
|
||||
</ListView.Transitions>
|
||||
</ListView>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
</UserControl>
|
||||
|
@ -149,7 +149,7 @@ void EquationInputArea::FocusEquationTextBox(EquationViewModel ^ equation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
auto container = EquationInputList->TryGetElement(index);
|
||||
auto container = EquationInputList->ContainerFromIndex(index);
|
||||
if (container == nullptr)
|
||||
{
|
||||
return;
|
||||
@ -234,7 +234,7 @@ void EquationInputArea::EquationTextBox_Loaded(Object ^ sender, RoutedEventArgs
|
||||
unsigned int index;
|
||||
if (Equations->IndexOf(copyEquationToFocus, &index))
|
||||
{
|
||||
auto container = EquationInputList->TryGetElement(index);
|
||||
auto container = static_cast<UIElement^>(EquationInputList->ContainerFromIndex(index));
|
||||
if (container != nullptr)
|
||||
{
|
||||
container->StartBringIntoView();
|
||||
@ -264,7 +264,7 @@ void EquationInputArea::FocusEquationIfNecessary(CalculatorApp::Controls::Equati
|
||||
unsigned int index;
|
||||
if (Equations->IndexOf(m_equationToFocus, &index))
|
||||
{
|
||||
auto container = EquationInputList->TryGetElement(index);
|
||||
auto container = static_cast<UIElement ^>(EquationInputList->ContainerFromIndex(index));
|
||||
if (container != nullptr)
|
||||
{
|
||||
container->StartBringIntoView();
|
||||
|
Loading…
Reference in New Issue
Block a user