Fixed layout issues with taskbar popups.
This commit is contained in:
parent
a18a404ed6
commit
b1781ba1ed
20 changed files with 120 additions and 20 deletions
|
@ -16,8 +16,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="WindowPopup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="WindowPopup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<ScrollViewer MaxHeight="400" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
<ScrollViewer MaxHeight="400" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
||||||
<StackPanel x:Name="WindowStackPanel" />
|
<StackPanel x:Name="WindowStackPanel" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
|
@ -10,6 +10,7 @@ using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using SafeExamBrowser.Applications.Contracts;
|
using SafeExamBrowser.Applications.Contracts;
|
||||||
|
@ -42,6 +43,7 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
Button.MouseEnter += (o, args) => WindowPopup.IsOpen = WindowStackPanel.Children.Count > 0;
|
Button.MouseEnter += (o, args) => WindowPopup.IsOpen = WindowStackPanel.Children.Count > 0;
|
||||||
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = WindowPopup.IsMouseOver));
|
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = WindowPopup.IsMouseOver));
|
||||||
Button.ToolTip = application.Tooltip;
|
Button.ToolTip = application.Tooltip;
|
||||||
|
WindowPopup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(WindowPopup_PlacementCallback);
|
||||||
WindowPopup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = IsMouseOver));
|
WindowPopup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = IsMouseOver));
|
||||||
|
|
||||||
WindowPopup.Opened += (o, args) =>
|
WindowPopup.Opened += (o, args) =>
|
||||||
|
@ -74,6 +76,14 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] WindowPopup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
var windows = application.GetWindows();
|
var windows = application.GetWindows();
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
<TextBlock x:Name="AudioDeviceName" Margin="5" TextAlignment="Center" />
|
<TextBlock x:Name="AudioDeviceName" Margin="5" TextAlignment="Center" />
|
||||||
<StackPanel Orientation="Horizontal" Height="40">
|
<StackPanel Orientation="Horizontal" Height="40">
|
||||||
|
|
|
@ -52,6 +52,7 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
MuteButton.Click += MuteButton_Click;
|
MuteButton.Click += MuteButton_Click;
|
||||||
MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_Muted.xaml") };
|
MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_Muted.xaml") };
|
||||||
NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_NoDevice.xaml") };
|
NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_NoDevice.xaml") };
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
||||||
Volume.ValueChanged += Volume_ValueChanged;
|
Volume.ValueChanged += Volume_ValueChanged;
|
||||||
|
|
||||||
|
@ -99,6 +100,14 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void Volume_DragStarted(object sender, DragStartedEventArgs e)
|
private void Volume_DragStarted(object sender, DragStartedEventArgs e)
|
||||||
{
|
{
|
||||||
Volume.ValueChanged -= Volume_ValueChanged;
|
Volume.ValueChanged -= Volume_ValueChanged;
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<ScrollViewer x:Name="LayoutsScrollViewer" MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
<ScrollViewer x:Name="LayoutsScrollViewer" MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
||||||
<StackPanel x:Name="LayoutsStackPanel" />
|
<StackPanel x:Name="LayoutsStackPanel" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using SafeExamBrowser.I18n.Contracts;
|
using SafeExamBrowser.I18n.Contracts;
|
||||||
using SafeExamBrowser.SystemComponents.Contracts.Keyboard;
|
using SafeExamBrowser.SystemComponents.Contracts.Keyboard;
|
||||||
|
@ -45,6 +47,7 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
keyboard.LayoutChanged += Keyboard_LayoutChanged;
|
keyboard.LayoutChanged += Keyboard_LayoutChanged;
|
||||||
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
||||||
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
||||||
|
|
||||||
Popup.Opened += (o, args) =>
|
Popup.Opened += (o, args) =>
|
||||||
|
@ -65,6 +68,14 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
Dispatcher.InvokeAsync(() => SetCurrent(layout));
|
Dispatcher.InvokeAsync(() => SetCurrent(layout));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void InitializeLayouts()
|
private void InitializeLayouts()
|
||||||
{
|
{
|
||||||
foreach (var layout in keyboard.GetLayouts())
|
foreach (var layout in keyboard.GetLayouts())
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<Grid MaxWidth="250" Margin="20,10,20,20">
|
<Grid MaxWidth="250" Margin="20,10,20,20">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition />
|
<RowDefinition />
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using SafeExamBrowser.I18n.Contracts;
|
using SafeExamBrowser.I18n.Contracts;
|
||||||
|
@ -49,6 +50,7 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
initialBrush = BatteryCharge.Fill;
|
initialBrush = BatteryCharge.Fill;
|
||||||
maxWidth = BatteryCharge.Width;
|
maxWidth = BatteryCharge.Width;
|
||||||
powerSupply.StatusChanged += PowerSupply_StatusChanged;
|
powerSupply.StatusChanged += PowerSupply_StatusChanged;
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
UpdateStatus(powerSupply.GetStatus());
|
UpdateStatus(powerSupply.GetStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +59,14 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
ClosePopup();
|
ClosePopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void PowerSupply_StatusChanged(IPowerSupplyStatus status)
|
private void PowerSupply_StatusChanged(IPowerSupplyStatus status)
|
||||||
{
|
{
|
||||||
Dispatcher.InvokeAsync(() => UpdateStatus(status));
|
Dispatcher.InvokeAsync(() => UpdateStatus(status));
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<ScrollViewer MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
<ScrollViewer MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
||||||
<StackPanel x:Name="NetworksStackPanel" />
|
<StackPanel x:Name="NetworksStackPanel" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
|
@ -10,6 +10,7 @@ using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using FontAwesome.WPF;
|
using FontAwesome.WPF;
|
||||||
using SafeExamBrowser.Applications.Contracts.Resources.Icons;
|
using SafeExamBrowser.Applications.Contracts.Resources.Icons;
|
||||||
|
@ -46,6 +47,7 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
SignalStrengthIcon.Child = GetIcon(0);
|
SignalStrengthIcon.Child = GetIcon(0);
|
||||||
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
||||||
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
||||||
|
|
||||||
Popup.Opened += (o, args) =>
|
Popup.Opened += (o, args) =>
|
||||||
|
@ -74,6 +76,14 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void WirelessAdapter_NetworksChanged()
|
private void WirelessAdapter_NetworksChanged()
|
||||||
{
|
{
|
||||||
Dispatcher.InvokeAsync(UpdateNetworks);
|
Dispatcher.InvokeAsync(UpdateNetworks);
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="WindowPopup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="WindowPopup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<ScrollViewer MaxHeight="400" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
<ScrollViewer MaxHeight="400" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
||||||
<StackPanel x:Name="WindowStackPanel" />
|
<StackPanel x:Name="WindowStackPanel" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
|
@ -10,6 +10,7 @@ using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using SafeExamBrowser.Applications.Contracts;
|
using SafeExamBrowser.Applications.Contracts;
|
||||||
|
@ -42,6 +43,7 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
Button.MouseEnter += (o, args) => WindowPopup.IsOpen = WindowStackPanel.Children.Count > 0;
|
Button.MouseEnter += (o, args) => WindowPopup.IsOpen = WindowStackPanel.Children.Count > 0;
|
||||||
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = WindowPopup.IsMouseOver));
|
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = WindowPopup.IsMouseOver));
|
||||||
Button.ToolTip = application.Tooltip;
|
Button.ToolTip = application.Tooltip;
|
||||||
|
WindowPopup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(WindowPopup_PlacementCallback);
|
||||||
WindowPopup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = IsMouseOver));
|
WindowPopup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => WindowPopup.IsOpen = IsMouseOver));
|
||||||
|
|
||||||
WindowPopup.Opened += (o, args) =>
|
WindowPopup.Opened += (o, args) =>
|
||||||
|
@ -74,6 +76,14 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] WindowPopup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
var windows = application.GetWindows();
|
var windows = application.GetWindows();
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
<TextBlock x:Name="AudioDeviceName" Margin="5" TextAlignment="Center" />
|
<TextBlock x:Name="AudioDeviceName" Margin="5" TextAlignment="Center" />
|
||||||
<StackPanel Orientation="Horizontal" Height="60" Margin="5,0">
|
<StackPanel Orientation="Horizontal" Height="60" Margin="5,0">
|
||||||
|
|
|
@ -52,6 +52,7 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
MuteButton.Click += MuteButton_Click;
|
MuteButton.Click += MuteButton_Click;
|
||||||
MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Muted.xaml") };
|
MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Muted.xaml") };
|
||||||
NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_NoDevice.xaml") };
|
NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_NoDevice.xaml") };
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
||||||
Volume.ValueChanged += Volume_ValueChanged;
|
Volume.ValueChanged += Volume_ValueChanged;
|
||||||
|
|
||||||
|
@ -99,6 +100,14 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void Volume_DragStarted(object sender, DragStartedEventArgs e)
|
private void Volume_DragStarted(object sender, DragStartedEventArgs e)
|
||||||
{
|
{
|
||||||
Volume.ValueChanged -= Volume_ValueChanged;
|
Volume.ValueChanged -= Volume_ValueChanged;
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<ScrollViewer x:Name="LayoutsScrollViewer" MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
<ScrollViewer x:Name="LayoutsScrollViewer" MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
||||||
<StackPanel x:Name="LayoutsStackPanel" />
|
<StackPanel x:Name="LayoutsStackPanel" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using SafeExamBrowser.I18n.Contracts;
|
using SafeExamBrowser.I18n.Contracts;
|
||||||
using SafeExamBrowser.SystemComponents.Contracts.Keyboard;
|
using SafeExamBrowser.SystemComponents.Contracts.Keyboard;
|
||||||
|
@ -45,6 +47,7 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
keyboard.LayoutChanged += Keyboard_LayoutChanged;
|
keyboard.LayoutChanged += Keyboard_LayoutChanged;
|
||||||
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
||||||
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
||||||
|
|
||||||
Popup.Opened += (o, args) =>
|
Popup.Opened += (o, args) =>
|
||||||
|
@ -65,6 +68,14 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
Dispatcher.InvokeAsync(() => SetCurrent(layout));
|
Dispatcher.InvokeAsync(() => SetCurrent(layout));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void InitializeLayouts()
|
private void InitializeLayouts()
|
||||||
{
|
{
|
||||||
foreach (var layout in keyboard.GetLayouts())
|
foreach (var layout in keyboard.GetLayouts())
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<Grid MaxWidth="250" Margin="20,10,20,20">
|
<Grid MaxWidth="250" Margin="20,10,20,20">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition />
|
<RowDefinition />
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using SafeExamBrowser.I18n.Contracts;
|
using SafeExamBrowser.I18n.Contracts;
|
||||||
|
@ -49,6 +50,7 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
initialBrush = BatteryCharge.Fill;
|
initialBrush = BatteryCharge.Fill;
|
||||||
maxWidth = BatteryCharge.Width;
|
maxWidth = BatteryCharge.Width;
|
||||||
powerSupply.StatusChanged += PowerSupply_StatusChanged;
|
powerSupply.StatusChanged += PowerSupply_StatusChanged;
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
UpdateStatus(powerSupply.GetStatus());
|
UpdateStatus(powerSupply.GetStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +59,14 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
ClosePopup();
|
ClosePopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void PowerSupply_StatusChanged(IPowerSupplyStatus status)
|
private void PowerSupply_StatusChanged(IPowerSupplyStatus status)
|
||||||
{
|
{
|
||||||
Dispatcher.InvokeAsync(() => UpdateStatus(status));
|
Dispatcher.InvokeAsync(() => UpdateStatus(status));
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="Popup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}">
|
<Popup x:Name="Popup" IsOpen="False" Placement="Custom" PlacementTarget="{Binding ElementName=Button}">
|
||||||
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="0.75,0.75,0.75,0">
|
<Border Background="LightGray" BorderBrush="Gray" BorderThickness="1,1,1,0">
|
||||||
<ScrollViewer MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
<ScrollViewer MaxHeight="250" VerticalScrollBarVisibility="Auto" Template="{StaticResource SmallBarScrollViewer}">
|
||||||
<StackPanel x:Name="NetworksStackPanel" />
|
<StackPanel x:Name="NetworksStackPanel" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
|
@ -10,6 +10,7 @@ using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using FontAwesome.WPF;
|
using FontAwesome.WPF;
|
||||||
using SafeExamBrowser.Applications.Contracts.Resources.Icons;
|
using SafeExamBrowser.Applications.Contracts.Resources.Icons;
|
||||||
|
@ -46,6 +47,7 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
SignalStrengthIcon.Child = GetIcon(0);
|
SignalStrengthIcon.Child = GetIcon(0);
|
||||||
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
|
||||||
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
|
||||||
|
Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
|
||||||
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
|
||||||
|
|
||||||
Popup.Opened += (o, args) =>
|
Popup.Opened += (o, args) =>
|
||||||
|
@ -74,6 +76,14 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CustomPopupPlacement[] Popup_PlacementCallback(Size popupSize, Size targetSize, Point offset)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new CustomPopupPlacement(new Point(targetSize.Width / 2 - popupSize.Width / 2, -popupSize.Height), PopupPrimaryAxis.None)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void WirelessAdapter_NetworksChanged()
|
private void WirelessAdapter_NetworksChanged()
|
||||||
{
|
{
|
||||||
Dispatcher.InvokeAsync(UpdateNetworks);
|
Dispatcher.InvokeAsync(UpdateNetworks);
|
||||||
|
|
Loading…
Reference in a new issue