Add support for memory list

This commit is contained in:
Jérôme Laban 2019-05-22 22:28:57 -04:00
commit 3fbc99db74
5 changed files with 324 additions and 227 deletions

View file

@ -1518,7 +1518,7 @@ namespace CalculatorApp.ViewModel
} }
} }
void OnMemoryItemPressed(object memoryItemPosition) public void OnMemoryItemPressed(object memoryItemPosition)
{ {
if (MemorizedNumbers != null && MemorizedNumbers.Count > 0) if (MemorizedNumbers != null && MemorizedNumbers.Count > 0)
{ {

View file

@ -4,106 +4,74 @@
xmlns:common="using:CalculatorApp.Common" xmlns:common="using:CalculatorApp.Common"
xmlns:controls="using:CalculatorApp.Controls" xmlns:controls="using:CalculatorApp.Controls"
xmlns:converters="using:CalculatorApp.Converters" xmlns:converters="using:CalculatorApp.Converters"
xmlns:local="using:CalculatorApp.Views" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CalculatorApp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:CalculatorApp.ViewModel" xmlns:model="using:CalculatorApp.ViewModel"
x:Name="MemoryList" x:Name="MemoryList"
FlowDirection="LeftToRight" FlowDirection="LeftToRight"
mc:Ignorable=""> mc:Ignorable="d">
<!-- UNO TODO
Loaded="MemoryList_Loaded"
Unloaded="MemoryList_Unloaded"
-->
<!-- UNO TODO
<UserControl.Resources> <UserControl.Resources>
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<converters:BooleanToVisibilityNegationConverter x:Key="BooleanToVisibilityNegationConverter"/> <converters:BooleanToVisibilityNegationConverter x:Key="BooleanToVisibilityNegationConverter"/>
<converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/> <converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/>
<MenuFlyout x:Key="MemoryContextMenu"> <MenuFlyout x:Key="MemoryContextMenu">
<MenuFlyoutItem x:Uid="ClearMemoryMenuItem" Click="OnClearMenuItemClicked">
<MenuFlyoutItem x:Uid="ClearMemoryMenuItem"
Click="OnClearMenuItemClicked">
<MenuFlyoutItem.Icon> <MenuFlyoutItem.Icon>
<FontIcon FontFamily="{StaticResource CalculatorFontFamily}" <FontIcon FontFamily="{StaticResource CalculatorFontFamily}" Glyph="&#xf754;"/>
Glyph="&#xf754;" />
</MenuFlyoutItem.Icon> </MenuFlyoutItem.Icon>
</MenuFlyoutItem> </MenuFlyoutItem>
<MenuFlyoutItem x:Uid="MemPlusMenuItem" Click="OnMemoryAddMenuItemClicked">
<MenuFlyoutItem x:Uid="MemPlusMenuItem"
Click="OnMemoryAddMenuItemClicked">
<MenuFlyoutItem.Icon> <MenuFlyoutItem.Icon>
<FontIcon FontFamily="{StaticResource CalculatorFontFamily}" <FontIcon FontFamily="{StaticResource CalculatorFontFamily}" Glyph="&#xf757;"/>
Glyph="&#xf757;" />
</MenuFlyoutItem.Icon> </MenuFlyoutItem.Icon>
</MenuFlyoutItem> </MenuFlyoutItem>
<MenuFlyoutItem x:Uid="MemMinusMenuItem" Click="OnMemorySubtractMenuItemClicked">
<MenuFlyoutItem x:Uid="MemMinusMenuItem"
Click="OnMemorySubtractMenuItemClicked">
<MenuFlyoutItem.Icon> <MenuFlyoutItem.Icon>
<FontIcon FontFamily="{StaticResource CalculatorFontFamily}" <FontIcon FontFamily="{StaticResource CalculatorFontFamily}" Glyph="&#xf758;"/>
Glyph="&#xf758;" />
</MenuFlyoutItem.Icon> </MenuFlyoutItem.Icon>
</MenuFlyoutItem> </MenuFlyoutItem>
</MenuFlyout> </MenuFlyout>
<DataTemplate x:Key="MemoryItemTemplate" <DataTemplate x:Key="MemoryItemTemplate" x:DataType="model:MemoryItemViewModel">
x:DataType="model:MemoryItemViewModel">
<local:MemoryListItem Model="{x:Bind Mode=OneWay}"/> <local:MemoryListItem Model="{x:Bind Mode=OneWay}"/>
</DataTemplate> </DataTemplate>
<Style x:Key="MemoryItemContainerStyle" <Style x:Key="MemoryItemContainerStyle"
BasedOn="{StaticResource HistoryMemoryItemContainerStyle}" BasedOn="{StaticResource HistoryMemoryItemContainerStyle}"
TargetType="ListViewItem"> TargetType="ListViewItem">
<Setter Property="Margin" <Setter Property="Margin" Value="0,0,0,8"/>
Value="0,0,0,8" />
</Style> </Style>
</UserControl.Resources> </UserControl.Resources>
<Grid x:Name="LayoutGrid"> <Grid x:Name="LayoutGrid">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="{Binding RowHeight, ElementName=MemoryList, Mode=OneWay}"/> <RowDefinition Height="{Binding RowHeight, ElementName=MemoryList, Mode=OneWay}"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<VisualStateManager.VisualStateGroups> <VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ErrorVisualStates"> <VisualStateGroup x:Name="ErrorVisualStates">
<VisualState x:Name="NoErrorLayout"/> <VisualState x:Name="NoErrorLayout"/>
<VisualState x:Name="ErrorLayout"> <VisualState x:Name="ErrorLayout">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="MemoryListView.IsEnabled" <Setter Target="MemoryListView.IsEnabled" Value="False"/>
Value="False" />
</VisualState.Setters> </VisualState.Setters>
</VisualState> </VisualState>
</VisualStateGroup> </VisualStateGroup>
<VisualStateGroup> <VisualStateGroup>
<VisualState x:Name="DockedLayout"> <VisualState x:Name="DockedLayout">
<VisualState.StateTriggers> <VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="560"/> <AdaptiveTrigger MinWindowWidth="560"/>
</VisualState.StateTriggers> </VisualState.StateTriggers>
<VisualState.Setters> <VisualState.Setters>
<Setter Target="MemoryPanel.(Grid.Row)" <Setter Target="MemoryPanel.(Grid.Row)" Value="0"/>
Value="1" /> <Setter Target="MemoryPanel.(Grid.RowSpan)" Value="2"/>
<Setter Target="MemoryPanel.(Grid.RowSpan)" <Setter Target="MemoryListView.Padding" Value="0"/>
Value="2" /> <Setter Target="BackgroundShade.Visibility" Value="Collapsed"/>
<Setter Target="MemoryListView.Padding"
Value="0" />
<Setter Target="BackgroundShade.Opacity"
Value="0" />
<Setter Target="CustomTitleBar.Height"
Value="0" />
</VisualState.Setters> </VisualState.Setters>
</VisualState> </VisualState>
<VisualState x:Name="DefaultLayout"> <VisualState x:Name="DefaultLayout">
<VisualState.StateTriggers> <VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/> <AdaptiveTrigger MinWindowWidth="0"/>
@ -111,9 +79,8 @@
</VisualState> </VisualState>
</VisualStateGroup> </VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<Border x:Name="BackgroundShade" <Border x:Name="BackgroundShade"
Grid.Row="2" Grid.Row="1"
Margin="0,-1,0,0" Margin="0,-1,0,0"
Padding="0" Padding="0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@ -121,15 +88,11 @@
Background="{ThemeResource SystemControlChromeMediumLowAcrylicElementMediumBrush}" Background="{ThemeResource SystemControlChromeMediumLowAcrylicElementMediumBrush}"
BorderBrush="{ThemeResource SystemControlForegroundChromeHighBrush}" BorderBrush="{ThemeResource SystemControlForegroundChromeHighBrush}"
BorderThickness="{ThemeResource HighContrastThicknessTop}"/> BorderThickness="{ThemeResource HighContrastThicknessTop}"/>
<Grid x:Name="MemoryPanel" Grid.Row="1">
<Grid x:Name="MemoryPanel"
Grid.Row="2">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock x:Name="MemoryPaneEmpty" <TextBlock x:Name="MemoryPaneEmpty"
x:Uid="MemoryPaneEmpty" x:Uid="MemoryPaneEmpty"
Margin="12,14,24,0" Margin="12,14,24,0"
@ -137,7 +100,6 @@
Foreground="{ThemeResource SystemControlPageTextBaseHighBrush}" Foreground="{ThemeResource SystemControlPageTextBaseHighBrush}"
TextWrapping="Wrap" TextWrapping="Wrap"
Visibility="{Binding IsMemoryEmpty, Converter={StaticResource BooleanToVisibilityConverter}}"/> Visibility="{Binding IsMemoryEmpty, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<ListView x:Name="MemoryListView" <ListView x:Name="MemoryListView"
Padding="0,12,0,0" Padding="0,12,0,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@ -152,7 +114,6 @@
TabIndex="0" TabIndex="0"
Visibility="{x:Bind Model.IsMemoryEmpty, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"> Visibility="{x:Bind Model.IsMemoryEmpty, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}">
<ListView.ItemContainerTransitions> <ListView.ItemContainerTransitions>
<TransitionCollection> <TransitionCollection>
<AddDeleteThemeTransition/> <AddDeleteThemeTransition/>
<ContentThemeTransition/> <ContentThemeTransition/>
@ -160,7 +121,6 @@
</TransitionCollection> </TransitionCollection>
</ListView.ItemContainerTransitions> </ListView.ItemContainerTransitions>
</ListView> </ListView>
<Button x:Name="ClearMemory" <Button x:Name="ClearMemory"
x:Uid="ClearMemory" x:Uid="ClearMemory"
Grid.Row="1" Grid.Row="1"
@ -171,10 +131,5 @@
Visibility="{x:Bind Model.IsMemoryEmpty, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"/> Visibility="{x:Bind Model.IsMemoryEmpty, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"/>
</Grid> </Grid>
<Border x:Name="CustomTitleBar" </Grid>
Height="32"
HorizontalAlignment="Stretch"
Background="{ThemeResource TitleBarBackgroundTransparentBrush}" />
</Grid>-->
</UserControl> </UserControl>

View file

@ -1,29 +1,125 @@
using System; // Copyright (c) Microsoft Corporation. All rights reserved.
using System.Collections.Generic; // Licensed under the MIT License.
using System.IO;
using System.Linq; //
using System.Runtime.InteropServices.WindowsRuntime; // xaml.h
// Declaration of the Memory class
//
using CalculatorApp.Common;
using CalculatorApp.ViewModel;
using Windows.Foundation; using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml; using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
namespace CalculatorApp namespace CalculatorApp
{ {
public sealed partial class Memory : UserControl public partial class Memory
{ {
public Memory() private Windows.UI.Xaml.Controls.MenuFlyout m_memoryItemFlyout;
private bool m_isErrorVisualState;
public CalculatorApp.ViewModel.StandardCalculatorViewModel Model => (CalculatorApp.ViewModel.StandardCalculatorViewModel)(this.DataContext);
public GridLength RowHeight
{ {
this.InitializeComponent(); get { return (GridLength)GetValue(RowHeightProperty); }
set { SetValue(RowHeightProperty, value); }
} }
public bool IsErrorVisualState { get; set; } public static readonly DependencyProperty RowHeightProperty =
DependencyProperty.Register("RowHeight", typeof(GridLength), typeof(Memory), new PropertyMetadata(GridLength.Auto));
public Memory()
{
m_isErrorVisualState = false;
InitializeComponent();
m_memoryItemFlyout = (MenuFlyout)(Resources["MemoryContextMenu"]);
MemoryPaneEmpty.FlowDirection = LocalizationService.GetInstance().GetFlowDirection();
}
void MemoryListItemClick(object sender, ItemClickEventArgs e)
{
MemoryItemViewModel memorySlot = (MemoryItemViewModel)(e.ClickedItem);
// In case the memory list is clicked and enter is pressed,
// On Item clicked event gets fired and e.ClickedItem is Null.
if (memorySlot != null)
{
Model.OnMemoryItemPressed(memorySlot.Position);
}
}
void OnContextRequested(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.Input.ContextRequestedEventArgs e)
{
// Walk up the tree to find the ListViewItem.
// There may not be one if the click wasn't on an item.
var requestedElement = (FrameworkElement)(e.OriginalSource);
while ((requestedElement != sender) && !(requestedElement is ListViewItem))
{
requestedElement = (FrameworkElement)(VisualTreeHelper.GetParent(requestedElement));
}
if (requestedElement != sender)
{
// The context menu request was for a ListViewItem.
var memorySlot = (MemoryItemViewModel)(MemoryListView.ItemFromContainer(requestedElement));
Point point;
if (e.TryGetPosition(requestedElement, out point))
{
m_memoryItemFlyout.ShowAt(requestedElement, point);
}
else
{
// Not invoked via pointer, so let XAML choose a default location.
m_memoryItemFlyout.ShowAt(requestedElement);
}
e.Handled = true;
}
}
void OnContextCanceled(Windows.UI.Xaml.UIElement sender, Windows.UI.Xaml.RoutedEventArgs e)
{
m_memoryItemFlyout.Hide();
}
void OnClearMenuItemClicked(object sender, RoutedEventArgs e)
{
GetMemoryItemForCurrentFlyout().Clear();
}
void OnMemoryAddMenuItemClicked(object sender, RoutedEventArgs e)
{
GetMemoryItemForCurrentFlyout().MemoryAdd();
}
void OnMemorySubtractMenuItemClicked(object sender, RoutedEventArgs e)
{
GetMemoryItemForCurrentFlyout().MemorySubtract();
}
public bool IsErrorVisualState
{
get => m_isErrorVisualState;
set
{
if (m_isErrorVisualState != value)
{
m_isErrorVisualState = value;
string newState = m_isErrorVisualState ? "ErrorLayout" : "NoErrorLayout";
VisualStateManager.GoToState(this, newState, false);
}
}
}
MemoryItemViewModel GetMemoryItemForCurrentFlyout()
{
var listViewItem = m_memoryItemFlyout.Target;
return (MemoryItemViewModel)(MemoryListView.ItemFromContainer(listViewItem));
}
} }
} }

View file

@ -1,81 +1,76 @@
<UserControl x:Class="WindowsCalculator.Shared.Views.MemoryListItem" <UserControl x:Class="CalculatorApp.MemoryListItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:common="using:CalculatorApp.Common" xmlns:common="using:CalculatorApp.Common"
xmlns:controls="using:CalculatorApp.Controls" xmlns:controls="using:CalculatorApp.Controls"
xmlns:converters="using:CalculatorApp.Converters" xmlns:converters="using:CalculatorApp.Converters"
xmlns:local="using:CalculatorApp.Views" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CalculatorApp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:CalculatorApp.ViewModel" xmlns:model="using:CalculatorApp.ViewModel"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
FlowDirection="LeftToRight" FlowDirection="LeftToRight"
mc:Ignorable=""> mc:Ignorable="d">
<!-- UNO TODO x:Name="MemoryListItem"--> <!-- UNO TODO x:Name="MemoryListItem"-->
<UserControl.Resources>
<!-- <!--
UNO TODO UNO TODO
<UserControl.Resources>
<muxc:FontIconSource x:Key="MemClearGlyph" <muxc:FontIconSource x:Key="MemClearGlyph"
FontFamily="{StaticResource CalculatorFontFamily}" FontFamily="{StaticResource CalculatorFontFamily}"
Glyph="&#xf754;"/> Glyph="&#xf754;"/>
<muxc:FontIconSource x:Key="MemPlusGlyph" <muxc:FontIconSource x:Key="MemPlusGlyph"
FontFamily="{StaticResource CalculatorFontFamily}" FontFamily="{StaticResource CalculatorFontFamily}"
Glyph="&#xf757;"/> Glyph="&#xf757;"/>
<muxc:FontIconSource x:Key="MemMinusGlyph" <muxc:FontIconSource x:Key="MemMinusGlyph"
FontFamily="{StaticResource CalculatorFontFamily}" FontFamily="{StaticResource CalculatorFontFamily}"
Glyph="&#xf758;"/> Glyph="&#xf758;"/>
<muxc:SwipeItems x:Key="MemorySwipeItems" <muxc:SwipeItems x:Key="MemorySwipeItems" Mode="Reveal">
Mode="Reveal">
<muxc:SwipeItem x:Uid="ClearMemorySwipeItem" <muxc:SwipeItem x:Uid="ClearMemorySwipeItem"
Background="{ThemeResource SystemControlBackgroundAccentBrush}" Background="{ThemeResource SystemControlBackgroundAccentBrush}"
IconSource="{StaticResource MemClearGlyph}" IconSource="{StaticResource MemClearGlyph}"
Invoked="OnClearSwipeInvoked"/> Invoked="OnClearSwipeInvoked"/>
<muxc:SwipeItem x:Uid="MemPlusSwipeItem" <muxc:SwipeItem x:Uid="MemPlusSwipeItem"
Background="{ThemeResource SystemControlBackgroundAccentBrush}" Background="{ThemeResource SystemControlBackgroundAccentBrush}"
IconSource="{StaticResource MemPlusGlyph}" IconSource="{StaticResource MemPlusGlyph}"
Invoked="OnMemoryAddSwipeInvoked"/> Invoked="OnMemoryAddSwipeInvoked"/>
<muxc:SwipeItem x:Uid="MemMinusSwipeItem" <muxc:SwipeItem x:Uid="MemMinusSwipeItem"
Background="{ThemeResource SystemControlBackgroundAccentBrush}" Background="{ThemeResource SystemControlBackgroundAccentBrush}"
IconSource="{StaticResource MemMinusGlyph}" IconSource="{StaticResource MemMinusGlyph}"
Invoked="OnMemorySubtractSwipeInvoked"/> Invoked="OnMemorySubtractSwipeInvoked"/>
</muxc:SwipeItems>--> </muxc:SwipeItems>
</UserControl.Resources> </UserControl.Resources>
<!--<muxc:SwipeControl RightItems="{StaticResource MemorySwipeItems}"> <muxc:SwipeControl RightItems="{StaticResource MemorySwipeItems}">
-->
<Grid>
<VisualStateManager.VisualStateGroups> <VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="HoverStates"> <VisualStateGroup x:Name="HoverStates">
<VisualState x:Name="MemoryButtonsVisible"> <VisualState x:Name="MemoryButtonsVisible">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="MemoryHoverButtons.Opacity" <Setter Target="MemoryHoverButtons.Opacity" Value="1"/>
Value="1" />
</VisualState.Setters> </VisualState.Setters>
</VisualState> </VisualState>
<VisualState x:Name="MemoryButtonsHidden"/> <VisualState x:Name="MemoryButtonsHidden"/>
</VisualStateGroup> </VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<Grid Background="Transparent"> <Grid Background="Transparent">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Margin="0,2,14,0" <TextBlock Margin="0,2,14,0"
HorizontalAlignment="Right"
Style="{ThemeResource TitleTextBlockStyle}" Style="{ThemeResource TitleTextBlockStyle}"
FontWeight="SemiBold" FontWeight="SemiBold"
FlowDirection="LeftToRight" FlowDirection="LeftToRight"
IsTextSelectionEnabled="True"
Text="{x:Bind Model.Value, Mode=OneWay}" Text="{x:Bind Model.Value, Mode=OneWay}"
TextAlignment="Right" TextAlignment="Right"
TextReadingOrder="DetectFromContent" TextReadingOrder="DetectFromContent"
TextWrapping="Wrap"/> TextWrapping="Wrap"/>
<Grid x:Name="MemoryHoverButtons" <Grid x:Name="MemoryHoverButtons"
Grid.Row="1" Grid.Row="1"
Margin="0,0,10,2" Margin="0,0,10,2"
@ -86,14 +81,12 @@
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button x:Uid="ClearMemoryItemButton" <Button x:Uid="ClearMemoryItemButton"
Style="{StaticResource MemoryHoverButtonStyle}" Style="{StaticResource MemoryHoverButtonStyle}"
Background="{ThemeResource SystemControlBackgroundAltMediumHighBrush}" Background="{ThemeResource SystemControlBackgroundAltMediumHighBrush}"
AutomationProperties.AutomationId="MClearButton" AutomationProperties.AutomationId="MClearButton"
Click="OnClearButtonClicked" Click="OnClearButtonClicked"
Content="MC"/> Content="MC"/>
<Button x:Uid="MemPlusItem" <Button x:Uid="MemPlusItem"
Grid.Column="1" Grid.Column="1"
Margin="0" Margin="0"
@ -102,7 +95,6 @@
AutomationProperties.AutomationId="MAddButton" AutomationProperties.AutomationId="MAddButton"
Click="OnMemoryAddButtonClicked" Click="OnMemoryAddButtonClicked"
Content="M+"/> Content="M+"/>
<Button x:Uid="MemMinusItem" <Button x:Uid="MemMinusItem"
Grid.Column="2" Grid.Column="2"
Style="{StaticResource MemoryHoverButtonStyle}" Style="{StaticResource MemoryHoverButtonStyle}"
@ -112,5 +104,5 @@
Content="M-"/> Content="M-"/>
</Grid> </Grid>
</Grid> </Grid>
</muxc:SwipeControl>--> </Grid>
</UserControl> </UserControl>

View file

@ -1,27 +1,81 @@
using System; // Copyright (c) Microsoft Corporation. All rights reserved.
using System.Collections.Generic; // Licensed under the MIT License.
using System.IO;
using System.Linq; using CalculatorApp.ViewModel;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml; using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 namespace CalculatorApp
{
/// <summary>
/// Represents a single item in the Memory list.
/// </summary>
public partial class MemoryListItem
{
namespace WindowsCalculator.Shared.Views public MemoryItemViewModel Model
{
public sealed partial class MemoryListItem : UserControl
{ {
get { return (MemoryItemViewModel)GetValue(ModelProperty); }
set { SetValue(ModelProperty, value); }
}
// Using a DependencyProperty as the backing store for Model. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ModelProperty =
DependencyProperty.Register("Model", typeof(MemoryItemViewModel), typeof(MemoryListItem), new PropertyMetadata(null));
public MemoryListItem() public MemoryListItem()
{ {
this.InitializeComponent(); InitializeComponent();
}
protected override void OnPointerEntered(Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
base.OnPointerEntered(e);
// Only show hover buttons when the user is using mouse or pen.
if (e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse
|| e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Pen)
{
VisualStateManager.GoToState(this, "MemoryButtonsVisible", true);
} }
} }
protected override void OnPointerExited(Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
base.OnPointerExited(e);
VisualStateManager.GoToState(this, "MemoryButtonsHidden", true);
}
void OnClearButtonClicked(object sender, RoutedEventArgs e)
{
Model.Clear();
}
void OnMemoryAddButtonClicked(object sender, RoutedEventArgs e)
{
Model.MemoryAdd();
}
void OnMemorySubtractButtonClicked(object sender, RoutedEventArgs e)
{
Model.MemorySubtract();
}
#if false
void OnClearSwipeInvoked(object sender, SwipeItemInvokedEventArgs e)
{
Model.Clear();
}
void OnMemoryAddSwipeInvoked(object sender, SwipeItemInvokedEventArgs e)
{
Model.MemoryAdd();
}
void OnMemorySubtractSwipeInvoked(object sender, SwipeItemInvokedEventArgs e)
{
Model.MemorySubtract();
}
#endif
};
} }