mirror of
https://github.com/Micke-K/IntuneManagement.git
synced 2026-09-29 03:15:38 +02:00
IntuneManagement 4.0.0-beta1
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
<Border xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Background="{DynamicResource WindowBackgroundColor}"
|
||||
TextElement.Foreground="{DynamicResource TextColor}">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/AboutDialog.xaml.
|
||||
|
||||
WPF -> Avalonia translations:
|
||||
- <Hyperlink> has no Avalonia equivalent. Replaced with an inline
|
||||
Button using Classes="link" (style defined in Themes/Styles.axaml).
|
||||
Show-AboutDialog wires the Click handler to launch the URL.
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup don't exist in Avalonia.
|
||||
Dropped — module list still reads cleanly with a fixed first column
|
||||
and natural sizing for the rest. Revisit if module names get long
|
||||
enough to misalign in practice.
|
||||
-->
|
||||
<Grid Name="grdAbout" Margin="10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBlock Name="txtTitle" FontWeight="Bold" Margin="0,5,0,0"/>
|
||||
|
||||
<TextBlock Grid.Row="1" Text="(c) 2022 Mikael Karlsson - MIT License" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Margin="0,5,0,0">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="See "/>
|
||||
<Button Name="linkSource" Classes="link" Content="GitHub"/>
|
||||
<TextBlock Text=" for more information."/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="Like the tool? "/>
|
||||
<Button Name="linkCoffee" Classes="link" Content="Buy me a coffee"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock Name="txtViewTitle" Grid.Column="1" Margin="20,5,0,0"/>
|
||||
|
||||
<TextBlock Name="txtViewDescription" Grid.Row="1" Grid.Column="1" Grid.RowSpan="3"
|
||||
VerticalAlignment="Top" Margin="20,5,0,0" TextWrapping="Wrap"/>
|
||||
|
||||
<TextBlock Grid.Row="3" Text="Loaded modules:" Margin="0,10,0,0"/>
|
||||
|
||||
<ListBox Name="lstModules" SelectionMode="Single" Grid.Row="4" Grid.ColumnSpan="2"
|
||||
MinHeight="200" MinWidth="500" Margin="0,5,0,5">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="200"/>
|
||||
<ColumnDefinition Width="120"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding Name}" Grid.Column="0"/>
|
||||
<TextBlock Text="{Binding Version}" Grid.Column="1" Margin="10,0,0,0"/>
|
||||
<TextBlock Text="{Binding Type}" Grid.Column="2" Margin="10,0,0,0"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</Grid>
|
||||
</Border>
|
||||
@@ -0,0 +1,160 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkAssignmentsForm.xaml. Hosted via
|
||||
Show-ModalForm — Apply / Close live in this Grid and call back into
|
||||
Show-GraphBulkAssignmentsForm.
|
||||
|
||||
Same WPF -> Avalonia translations as the other bulk forms:
|
||||
- Grid host (modal-form host owns the chrome).
|
||||
- SharedSizeGroup dropped — explicit ColumnDefinition Auto/* widths.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- DataGrid columns inlined; chkSelectAll toolbar checkbox in place
|
||||
of WPF's bound header checkbox (Avalonia DataGridCheckBoxColumn
|
||||
has no bindable header — same trick as Slice 3e/4a/4b/4c/4d).
|
||||
- DynamicResource ControlBackgroundColor / TextColor dropped — theme
|
||||
drives DataGrid / TextBlock backgrounds.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Top property block: Action / Filter / List-by -->
|
||||
<Grid Grid.Row="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Add: union of current and selected. Replace: overwrite all current assignments. Remove: subtract selected from current.">
|
||||
<Label Content="Action"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal"
|
||||
VerticalAlignment="Center" Margin="0,5,0,5">
|
||||
<RadioButton Name="rbBulkAssignAdd" Content="Add" GroupName="BulkAssignAction" IsChecked="True" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbBulkAssignReplace" Content="Replace" GroupName="BulkAssignAction" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbBulkAssignRemove" Content="Remove" GroupName="BulkAssignAction" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Regex (or literal substring) matched against each policy's Name. Leave empty to target every listed policy.">
|
||||
<Label Content="Name filter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Name="txtBulkAssignNameFilter"
|
||||
Margin="0,5,0,5"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Group: pick whole categories (Configuration, Compliance, ...). API: pick individual policy types. Apps and Health Scripts are supported — configure per-policy fields via the App settings... button.">
|
||||
<Label Content="List by"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal"
|
||||
VerticalAlignment="Center" Margin="0,5,0,5">
|
||||
<RadioButton Name="rbBulkAssignViewGroup" Content="Group" GroupName="BulkAssignView" IsChecked="True" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbBulkAssignViewType" Content="API" GroupName="BulkAssignView" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- Middle: object DataGrid (left) + assignment list DataGrid + buttons (right) -->
|
||||
<Grid Grid.Row="1" Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="2*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Grid.Column="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,3" ToolTip.Tip="Select the policy types / groups to update">
|
||||
<Label Content="Objects to update"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Name="dgBulkAssignObjects"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="True"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object type" Binding="{Binding Title}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Column="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,3" ToolTip.Tip="Targets that will be added / replaced / removed. Double-click a row to open settings.">
|
||||
<Label Content="Assignments to apply"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Name="dgBulkAssignList"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
CanUserReorderColumns="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Target type" Binding="{Binding TargetTypeDisplay}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Group" Binding="{Binding GroupName}" IsReadOnly="True" Width="2*"/>
|
||||
<DataGridTextColumn Header="Intent" Binding="{Binding Intent}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Filter" Binding="{Binding FilterDisplay}" IsReadOnly="True" Width="*"/>
|
||||
<DataGridTextColumn Header="App settings" Binding="{Binding SettingsDisplay}" IsReadOnly="True" Width="Auto"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,5,0,0">
|
||||
<Button Name="btnBulkAssignAddGroup" Content="Add group..." MinWidth="120" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Pick an AAD group to include or exclude"/>
|
||||
<Button Name="btnBulkAssignAddAllDev" Content="All devices" MinWidth="100" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Add the All Devices virtual target"/>
|
||||
<Button Name="btnBulkAssignAddAllUsers" Content="All users" MinWidth="100" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Add the All Users virtual target"/>
|
||||
<Button Name="btnBulkAssignSettings" Content="App settings..." MinWidth="120" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Configure per-platform app assignment settings for the selected row"/>
|
||||
<Button Name="btnBulkAssignRemoveSel" Content="Remove selected" MinWidth="120"
|
||||
ToolTip.Tip="Remove the highlighted row from the list above"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<!-- Bottom: status + Apply / Close -->
|
||||
<Grid Grid.Row="2" Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Name="txtBulkAssignStatus" VerticalAlignment="Center"
|
||||
Opacity="0.8"/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button Name="btnBulkAssignApply" Content="Apply" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnBulkAssignClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,75 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5" MinWidth="500" MinHeight="400">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkAssignmentsGroupPicker.xaml. Hosted via
|
||||
Show-ModalForm — stacks over the Bulk Assignments form via grdModal.
|
||||
|
||||
The WPF original used DisplayMemberPath / SelectedValuePath on the
|
||||
ComboBoxes; in Avalonia those map to ItemTemplate (assigned in code
|
||||
via DataTemplates is finicky for runtime PSCustomObject) so we use
|
||||
DisplayMemberBinding for the ListBox and assign ComboBox items as
|
||||
plain string lists where possible. cbGroupFilter is a list of
|
||||
PSCustomObject with Id/Name — Avalonia binds to the .Name property
|
||||
via ItemTemplate (set in code) and we read .Id back manually on OK.
|
||||
cbGroupIntent is bound the same way.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Search:" Margin="0,0,5,0"
|
||||
VerticalAlignment="Center"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Name="txtGroupSearch" Margin="0,3,5,3"/>
|
||||
<Button Grid.Row="0" Grid.Column="2" Name="btnGroupSearch" Content="Search" MinWidth="80"/>
|
||||
|
||||
<ListBox Grid.Row="1" Grid.ColumnSpan="3" Name="lstGroupResults"
|
||||
Margin="0,5,0,5" SelectionMode="Single"/>
|
||||
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Direction:" Margin="0,0,5,0"
|
||||
VerticalAlignment="Center"/>
|
||||
<StackPanel Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Orientation="Horizontal"
|
||||
VerticalAlignment="Center" Margin="0,5,0,5">
|
||||
<RadioButton Name="rbGroupInclude" Content="Include" GroupName="GroupPickerDir" IsChecked="True" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbGroupExclude" Content="Exclude" GroupName="GroupPickerDir" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Filter:" Margin="0,0,5,0"
|
||||
VerticalAlignment="Center"/>
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" Name="cbGroupFilter"
|
||||
Margin="0,3,0,3" HorizontalAlignment="Stretch"/>
|
||||
|
||||
<Label Grid.Row="4" Grid.Column="0" Content="Filter mode:" Margin="0,0,5,0"
|
||||
VerticalAlignment="Center"/>
|
||||
<StackPanel Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" Orientation="Horizontal"
|
||||
VerticalAlignment="Center" Margin="0,5,0,5">
|
||||
<RadioButton Name="rbGroupFilterInclude" Content="Include" GroupName="GroupPickerFilterDir" IsChecked="True" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbGroupFilterExclude" Content="Exclude" GroupName="GroupPickerFilterDir" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Only applies when the target policy is an app (mobile app assignment). Ignored for Device Configuration, Compliance, scripts, etc.">
|
||||
<Label Content="App intent:"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="2" Name="cbGroupIntent"
|
||||
Margin="0,3,0,3" HorizontalAlignment="Stretch"
|
||||
ToolTip.Tip="Required = auto-install. Available = visible in Company Portal. Uninstall = auto-remove. Available without enrollment = web/CP without MDM enrollment. Not available = hidden."/>
|
||||
|
||||
<StackPanel Grid.Row="6" Grid.ColumnSpan="3" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,8,0,0">
|
||||
<Button Name="btnGroupPickerOK" Content="Add" MinWidth="100" Margin="0,0,5,0"/>
|
||||
<Button Name="btnGroupPickerCancel" Content="Cancel" MinWidth="100"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,427 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5" MinWidth="640" MinHeight="500">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkAssignmentsSettings.xaml. Hosted via
|
||||
Show-ModalForm — stacks over the Bulk Assignments form via grdModal.
|
||||
|
||||
Per-platform app assignment settings. 13 TabItems, each containing a
|
||||
ScrollViewer + StackPanel with an Apply CheckBox (FontWeight=SemiBold)
|
||||
and a Grid of fields whose IsEnabled is bound to the Apply checkbox.
|
||||
|
||||
WPF -> Avalonia translations:
|
||||
- SharedSizeGroup dropped — explicit ColumnDefinition Auto/* widths.
|
||||
- DynamicResource ControlBackgroundColor / TextColor dropped — theme
|
||||
drives backgrounds.
|
||||
- Binding ElementName=...,Path=IsChecked still works for IsEnabled.
|
||||
- ToolTip="..." -> ToolTip.Tip="...".
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBlock Grid.Row="0" Margin="0,0,0,6" TextWrapping="Wrap">
|
||||
Per-platform app assignment settings. Tick "Apply these settings" on a tab to include it in
|
||||
the POST for matching apps; leave it unticked to let Graph defaults stand.
|
||||
</TextBlock>
|
||||
|
||||
<TabControl Grid.Row="1" Name="tcBulkAssignSettings">
|
||||
|
||||
<!-- ======================== iOS LOB ======================== -->
|
||||
<TabItem Header="iOS LOB" Name="tabIosLob">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyIosLob" Content="Apply these settings to iOS LOB apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyIosLob, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Is removable:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkIosLob_IsRemovable" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Prevent backup:"/>
|
||||
<CheckBox Grid.Row="1" Grid.Column="1" Name="chkIosLob_PreventBackup" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Uninstall on removal:"/>
|
||||
<CheckBox Grid.Row="2" Grid.Column="1" Name="chkIosLob_Uninstall" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="VPN config id:"/>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" Name="txtIosLob_VpnId" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== iOS Store ======================== -->
|
||||
<TabItem Header="iOS Store" Name="tabIosStore">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyIosStore" Content="Apply these settings to iOS Store apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyIosStore, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Is removable:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkIosStore_IsRemovable" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Prevent backup:"/>
|
||||
<CheckBox Grid.Row="1" Grid.Column="1" Name="chkIosStore_PreventBackup" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Uninstall on removal:"/>
|
||||
<CheckBox Grid.Row="2" Grid.Column="1" Name="chkIosStore_Uninstall" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="VPN config id:"/>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" Name="txtIosStore_VpnId" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== iOS VPP ======================== -->
|
||||
<TabItem Header="iOS VPP" Name="tabIosVpp">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyIosVpp" Content="Apply these settings to iOS VPP apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyIosVpp, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Use device licensing:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkIosVpp_DeviceLicensing" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Is removable:"/>
|
||||
<CheckBox Grid.Row="1" Grid.Column="1" Name="chkIosVpp_IsRemovable" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Prevent backup:"/>
|
||||
<CheckBox Grid.Row="2" Grid.Column="1" Name="chkIosVpp_PreventBackup" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Prevent auto-update:"/>
|
||||
<CheckBox Grid.Row="3" Grid.Column="1" Name="chkIosVpp_PreventAutoUpdate" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="4" Grid.Column="0" Content="Uninstall on removal:"/>
|
||||
<CheckBox Grid.Row="4" Grid.Column="1" Name="chkIosVpp_Uninstall" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="5" Grid.Column="0" Content="VPN config id:"/>
|
||||
<TextBox Grid.Row="5" Grid.Column="1" Name="txtIosVpp_VpnId" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== iOS DDM LOB ======================== -->
|
||||
<TabItem Header="iOS DDM" Name="tabIosDdm">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyIosDdm" Content="Apply these settings to iOS DDM LOB apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyIosDdm, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Associated domains:"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Name="txtIosDdm_Domains" Margin="0,5,0,5" Height="50"
|
||||
AcceptsReturn="True" TextWrapping="Wrap"
|
||||
ToolTip.Tip="One domain per line."/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Direct download:"/>
|
||||
<CheckBox Grid.Row="1" Grid.Column="1" Name="chkIosDdm_DirectDownload" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Prevent backup:"/>
|
||||
<CheckBox Grid.Row="2" Grid.Column="1" Name="chkIosDdm_PreventBackup" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Tap-to-pay screen lock:"/>
|
||||
<CheckBox Grid.Row="3" Grid.Column="1" Name="chkIosDdm_TapToPay" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="4" Grid.Column="0" Content="VPN config id:"/>
|
||||
<TextBox Grid.Row="4" Grid.Column="1" Name="txtIosDdm_VpnId" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== Android Managed Store ======================== -->
|
||||
<TabItem Header="Android Store" Name="tabAndroidStore">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyAndroidStore" Content="Apply these settings to Android Managed Store apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyAndroidStore, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Auto-update mode:"/>
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" Name="cbAndroidStore_AutoUpdate" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Track IDs:"/>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Name="txtAndroidStore_Tracks" Margin="0,5,0,5" Height="50"
|
||||
AcceptsReturn="True" TextWrapping="Wrap"
|
||||
ToolTip.Tip="One track id per line. Leave empty for default production track."/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== macOS LOB ======================== -->
|
||||
<TabItem Header="macOS LOB" Name="tabMacLob">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyMacLob" Content="Apply these settings to macOS LOB apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyMacLob, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Uninstall on removal:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkMacLob_Uninstall" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== macOS VPP ======================== -->
|
||||
<TabItem Header="macOS VPP" Name="tabMacVpp">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyMacVpp" Content="Apply these settings to macOS VPP apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyMacVpp, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Use device licensing:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkMacVpp_DeviceLicensing" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Prevent backup:"/>
|
||||
<CheckBox Grid.Row="1" Grid.Column="1" Name="chkMacVpp_PreventBackup" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Prevent auto-update:"/>
|
||||
<CheckBox Grid.Row="2" Grid.Column="1" Name="chkMacVpp_PreventAutoUpdate" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Uninstall on removal:"/>
|
||||
<CheckBox Grid.Row="3" Grid.Column="1" Name="chkMacVpp_Uninstall" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== Microsoft Store for Business ======================== -->
|
||||
<TabItem Header="MS Store" Name="tabMsStore">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyMsStore" Content="Apply these settings to Microsoft Store for Business apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyMsStore, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Device context:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkMsStore_DeviceContext" VerticalAlignment="Center" Margin="0,5,0,5"
|
||||
ToolTip.Tip="True = install in device context (all users on device). False = per-user."/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== Windows AppX ======================== -->
|
||||
<TabItem Header="Windows AppX" Name="tabWinAppx">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyWinAppx" Content="Apply these settings to Windows AppX apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyWinAppx, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Device context:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkWinAppx_DeviceContext" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== Windows Universal AppX ======================== -->
|
||||
<TabItem Header="Windows UAP" Name="tabWinUap">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyWinUap" Content="Apply these settings to Windows Universal AppX apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyWinUap, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Device context:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkWinUap_DeviceContext" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== Win32 LOB ======================== -->
|
||||
<TabItem Header="Win32 LOB" Name="tabWin32">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyWin32" Content="Apply these settings to Win32 LOB / Win32 Catalog apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyWin32, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Delivery optimization:"/>
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" Name="cbWin32_DeliveryOpt" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Notifications:"/>
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" Name="cbWin32_Notifications" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<TextBlock Grid.Row="2" Grid.ColumnSpan="2" Text="Auto-update settings" FontWeight="SemiBold" Margin="0,8,0,4"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Superseded apps:"/>
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" Name="cbWin32_Superseded" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.ColumnSpan="2" Text="Install time settings" FontWeight="SemiBold" Margin="0,8,0,4"/>
|
||||
<Label Grid.Row="5" Grid.Column="0" Content="Use local time:"/>
|
||||
<CheckBox Grid.Row="5" Grid.Column="1" Name="chkWin32_UseLocalTime" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="6" Grid.Column="0" Content="Start (ISO):"/>
|
||||
<TextBox Grid.Row="6" Grid.Column="1" Name="txtWin32_StartTime" Margin="0,5,0,5"
|
||||
ToolTip.Tip="ISO8601 datetime, e.g. 2026-06-01T10:00:00Z. Leave empty for no start time."/>
|
||||
<Label Grid.Row="7" Grid.Column="0" Content="Deadline (ISO):"/>
|
||||
<TextBox Grid.Row="7" Grid.Column="1" Name="txtWin32_DeadlineTime" Margin="0,5,0,5"/>
|
||||
|
||||
<TextBlock Grid.Row="8" Grid.ColumnSpan="2" Text="Restart settings (Required intent only)" FontWeight="SemiBold" Margin="0,8,0,4"/>
|
||||
<Label Grid.Row="9" Grid.Column="0" Content="Grace period (min):"/>
|
||||
<TextBox Grid.Row="9" Grid.Column="1" Name="txtWin32_GracePeriod" Margin="0,5,0,5" Width="120" HorizontalAlignment="Left"/>
|
||||
<Label Grid.Row="10" Grid.Column="0" Content="Countdown (min):"/>
|
||||
<TextBox Grid.Row="10" Grid.Column="1" Name="txtWin32_Countdown" Margin="0,5,0,5" Width="120" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== winGet ======================== -->
|
||||
<TabItem Header="winGet" Name="tabWinGet">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyWinGet" Content="Apply these settings to winGet apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyWinGet, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Notifications:"/>
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" Name="cbWinGet_Notifications" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<TextBlock Grid.Row="1" Grid.ColumnSpan="2" Text="Install time settings (deadline required when enabled)" FontWeight="SemiBold" Margin="0,8,0,4"/>
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Use local time:"/>
|
||||
<CheckBox Grid.Row="2" Grid.Column="1" Name="chkWinGet_UseLocalTime" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Deadline (ISO):"/>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" Name="txtWinGet_DeadlineTime" Margin="0,5,0,5"/>
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.ColumnSpan="2" Text="Restart settings (Required intent only)" FontWeight="SemiBold" Margin="0,8,0,4"/>
|
||||
<Label Grid.Row="5" Grid.Column="0" Content="Grace period (min):"/>
|
||||
<TextBox Grid.Row="5" Grid.Column="1" Name="txtWinGet_GracePeriod" Margin="0,5,0,5" Width="120" HorizontalAlignment="Left"/>
|
||||
<Label Grid.Row="6" Grid.Column="0" Content="Countdown (min):"/>
|
||||
<TextBox Grid.Row="6" Grid.Column="1" Name="txtWinGet_Countdown" Margin="0,5,0,5" Width="120" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== Health Script ======================== -->
|
||||
<TabItem Header="Health Script" Name="tabHealthScript">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyHealthScript" Content="Apply these settings to Health Script (Proactive Remediation) assignments" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyHealthScript, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Run remediation:"/>
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" Name="chkScript_RunRemediation" VerticalAlignment="Center" Margin="0,5,0,5"
|
||||
ToolTip.Tip="True = run the remediation script when detection finds an issue. False = detection only."/>
|
||||
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Schedule type:"/>
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" Name="cbScript_ScheduleType" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Interval:"/>
|
||||
<StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBox Name="txtScript_Interval" Margin="0,5,5,5" Width="80"
|
||||
ToolTip.Tip="Hourly: every N hours. Daily: every N days. Once: ignored."/>
|
||||
<TextBlock Text="(hours / days / once)" VerticalAlignment="Center" Opacity="0.6"/>
|
||||
</StackPanel>
|
||||
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Time (HH:MM):"/>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" Name="txtScript_Time" Margin="0,5,0,5" Width="100" HorizontalAlignment="Left"
|
||||
ToolTip.Tip="24-hour HH:MM. Ignored when schedule type is Hourly."/>
|
||||
|
||||
<Label Grid.Row="4" Grid.Column="0" Content="Use UTC:"/>
|
||||
<CheckBox Grid.Row="4" Grid.Column="1" Name="chkScript_UseUtc" VerticalAlignment="Center" Margin="0,5,0,5"
|
||||
ToolTip.Tip="Off = device local time. Ignored when schedule type is Hourly."/>
|
||||
|
||||
<Label Grid.Row="5" Grid.Column="0" Content="Date (YYYY-MM-DD):"/>
|
||||
<TextBox Grid.Row="5" Grid.Column="1" Name="txtScript_Date" Margin="0,5,0,5" Width="150" HorizontalAlignment="Left"
|
||||
ToolTip.Tip="Required for Once schedule type. Ignored otherwise."/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- ======================== Windows AutoUpdate Catalog ======================== -->
|
||||
<TabItem Header="Win AutoUpdate" Name="tabWinAutoUpdate">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8">
|
||||
<CheckBox Name="chkApplyWinAutoUpdate" Content="Apply these settings to Windows AutoUpdate Catalog apps" FontWeight="SemiBold" Margin="0,0,0,8"/>
|
||||
<Grid IsEnabled="{Binding ElementName=chkApplyWinAutoUpdate, Path=IsChecked}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/><RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="180"/><ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Delivery optimization:"/>
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" Name="cbWinAutoUpdate_DeliveryOpt" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Notification type:"/>
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" Name="cbWinAutoUpdate_Notifications" Margin="0,5,0,5" Width="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<TextBlock Grid.Row="2" Grid.ColumnSpan="2" Text="Install time settings" FontWeight="SemiBold" Margin="0,8,0,4"/>
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Use local time:"/>
|
||||
<CheckBox Grid.Row="3" Grid.Column="1" Name="chkWinAutoUpdate_UseLocalTime" VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="4" Grid.Column="0" Content="Start (ISO):"/>
|
||||
<TextBox Grid.Row="4" Grid.Column="1" Name="txtWinAutoUpdate_StartTime" Margin="0,5,0,5"/>
|
||||
<Label Grid.Row="5" Grid.Column="0" Content="Deadline (ISO):"/>
|
||||
<TextBox Grid.Row="5" Grid.Column="1" Name="txtWinAutoUpdate_DeadlineTime" Margin="0,5,0,5"/>
|
||||
|
||||
<TextBlock Grid.Row="6" Grid.ColumnSpan="2" Text="Restart settings (Required intent only)" FontWeight="SemiBold" Margin="0,8,0,4"/>
|
||||
<Label Grid.Row="7" Grid.Column="0" Content="Grace period (min):"/>
|
||||
<TextBox Grid.Row="7" Grid.Column="1" Name="txtWinAutoUpdate_GracePeriod" Margin="0,5,0,5" Width="120" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,8,0,0">
|
||||
<Button Name="btnBulkAssignSettingsOK" Content="OK" Width="100" Margin="0,0,5,0"/>
|
||||
<Button Name="btnBulkAssignSettingsCancel" Content="Cancel" Width="100"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,183 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5" MinWidth="700" MinHeight="500">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkCompare.xaml. Hosted via Show-ModalForm
|
||||
with -HideButtons; Compare / Close live inside this Grid and call
|
||||
back into Show-GraphBulkCompareForm.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup="TitleColumn" dropped —
|
||||
explicit Auto/* widths used in each child Grid.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- DisplayMemberPath / SelectedValuePath dropped on the ComboBoxes —
|
||||
the ItemTemplate is set in code via LoadXaml and the SelectedItem
|
||||
is mapped back to the original PSCustomObject through a hashtable
|
||||
(same pattern as Slice 3d1's CompareForm).
|
||||
- DataGrid columns inlined; chkSelectAll toolbar checkbox replaces
|
||||
WPF's bound header checkbox (Avalonia DataGridCheckBoxColumn has
|
||||
no bindable header — same trick as Slice 3e/4a/4b/4c/4d/4e).
|
||||
- DynamicResource ControlBackgroundColor dropped — theme drives the
|
||||
DataGrid background.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Provider picker -->
|
||||
<Grid Grid.Row="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the objects to compare e.g. compare exported files with existing objects or two existing objects based on name">
|
||||
<Label Content="Compare object"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" Name="cbCompareProvider" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Stretch"/>
|
||||
</Grid>
|
||||
|
||||
<!-- Provider-specific options -->
|
||||
<ContentControl Grid.Row="1" Name="ccContentProviderOptions" Margin="0,5,0,0"/>
|
||||
|
||||
<!-- Output config + objects-to-compare DataGrid -->
|
||||
<Grid Grid.Row="2" Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specifies how the export csv should be saved. One file per ObjectType or one file for all objects.">
|
||||
<Label Content="Save as"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" Name="cbCompareSave" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the output file format for compare results">
|
||||
<Label Content="Output format"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" Name="cbCompareOutputFormat" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify how objects should be compared">
|
||||
<Label Content="Comparison Type"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" Name="cbCompareType" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the character to use for separating properties in the CSV file">
|
||||
<Label Content="CSV Delimiter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" Name="cbCompareCSVDelimiter"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the character to use for separating values for properties with more than one value. New line will cause a new line in the exported CSV">
|
||||
<Label Content="Multi-Value Delimiter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="4" Grid.Column="1" Name="cbCompareMultiValueDelimiter" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Skip mismatch coloring for displayName, description, id, createdDateTime, lastModifiedDateTime and version. These will almost always differ between two objects.">
|
||||
<Label Content="Ignore core properties"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="5" Grid.Column="1" Name="chkIgnoreCoreProperties"
|
||||
Margin="0,5,0,0" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Skip comparing assignments.">
|
||||
<Label Content="Skip Assignments"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="6" Grid.Column="1" Name="chkSkipCompareAssignments"
|
||||
Margin="0,5,0,0" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Skip policies that only exist on the compare side (e.g. in Intune but never exported).">
|
||||
<Label Content="Skip Missing Source Policies"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="7" Grid.Column="1" Name="chkSkipMissingSourcePolicies"
|
||||
Margin="0,5,0,0" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="8" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Skip policies whose counterpart is missing (e.g. exported file with no matching object in Intune).">
|
||||
<Label Content="Skip Missing Destination Policies"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="8" Grid.Column="1" Name="chkSkipMissingDestinationPolicies"
|
||||
Margin="0,5,0,0" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
|
||||
<Grid Grid.Row="9" Grid.ColumnSpan="2" Name="grdObjectsToCompareSection" Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,3" ToolTip.Tip="Select the object types that should be compared">
|
||||
<Label Content="Objects to compare"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Name="dgObjectsToCompare"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserSortColumns="True"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="True"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object type" Binding="{Binding Title}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<!-- Status + Compare / Close -->
|
||||
<Grid Grid.Row="3" Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Name="txtBulkCompareStatus" VerticalAlignment="Center"
|
||||
Opacity="0.8"/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button Name="btnStartCompare" Content="Compare" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,72 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkCopy.xaml (Bulk Copy, originally from
|
||||
the old project's Copy extension). Hosted via Show-ModalForm.
|
||||
|
||||
WPF -> Avalonia translations applied (same set as BulkDeleteForm):
|
||||
- SharedSizeGroup dropped - explicit ColumnDefinition widths.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- Inline DataGrid columns with a select-all header CheckBox.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the pattern of the source objects e.g. Test -">
|
||||
<Label Content="Source object name pattern"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtCopyFromPattern" Grid.Row="0" Grid.Column="1" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the pattern of the new object e.g. Prod -">
|
||||
<Label Content="Copy object name pattern"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtCopyToPattern" Grid.Row="1" Grid.Column="1" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Top" ToolTip.Tip="Select the object types that should be copied">
|
||||
<Label Content="Objects to copy"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Name="dgBulkCopyObjects"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
Margin="0,0,0,5">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="True"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object type" Binding="{Binding Title}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<StackPanel Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2"
|
||||
Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button Name="btnStartCopy" Content="Copy" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,70 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkDeleteForm.xaml. Hosted via Show-ModalForm
|
||||
— Delete / Close live in this Grid and call back into
|
||||
Show-GraphBulkDeleteForm.
|
||||
|
||||
WPF -> Avalonia translations applied (same set as BulkExport/BulkImport):
|
||||
- Window/UserControl host -> Grid (modal-form host owns the chrome).
|
||||
- SharedSizeGroup dropped — explicit ColumnDefinition Width="Auto"/"*".
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- Inline DataGrid columns (no Get-GridCheckboxColumn header trick —
|
||||
chkSelectAll toolbar checkbox replaces it, default unchecked
|
||||
because bulk-delete rows are unselected by default).
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify name filter for the objects to delete">
|
||||
<Label Content="Name filter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtDeleteNameFilter" Grid.Row="0" Grid.Column="1"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Top" ToolTip.Tip="All objects of the selected types will be deleted">
|
||||
<Label Content="Objects to delete"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Name="dgBulkDeleteObjects"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
Margin="0,0,0,5">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="False"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object type" Binding="{Binding Title}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<StackPanel Name="spDeleteSubMenu" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2"
|
||||
Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button Name="btnDelete" Content="Delete" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,176 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkExportForm.xaml. Hosted via Show-ModalForm
|
||||
— Save / Export / Close live in this Grid and call back into
|
||||
Show-GraphBulkExportForm.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Window/UserControl host -> Grid (modal-form host owns the chrome).
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup dropped — single-grid
|
||||
ColumnDefinition Width="Auto"/"*" keeps rows aligned.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- {Binding ExportFolder, Mode=TwoWay} et al replaced by
|
||||
imperative property assignment in Show-GraphBulkExportForm —
|
||||
IntuneManagerExportSettings has no INotifyPropertyChanged so
|
||||
two-way bindings would render but never round-trip. Same
|
||||
convention as ExportForm.axaml / ImportForm.axaml.
|
||||
- chkAddObjectType is forced IsChecked=true and IsEnabled=false
|
||||
(matches WPF — bulk export always pushes a per-type subfolder).
|
||||
- DataGrid Columns are declared inline — WPF used
|
||||
Get-GridCheckboxColumn (header-checkbox toggle-all) which has
|
||||
no Avalonia bindable equivalent. The "Select all" toolbar
|
||||
checkbox under spExportSubMenu replaces it (same convention
|
||||
as ImportForm.axaml).
|
||||
- DataGrid Background DynamicResource binding dropped — Avalonia
|
||||
theme keys differ; default works.
|
||||
- Per-type AddUIExportExtensions (per-policy-type checkboxes)
|
||||
NOT wired — same constraint as Slice 3c.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid Name="grdExportProperties">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="The root folder where exported files will be stored">
|
||||
<Label Content="Export root"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<Grid Grid.Row="0" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Name="txtExportPath" Grid.Column="0"/>
|
||||
<Button Name="browseExportPath" Grid.Column="2" Content="..."
|
||||
Padding="5,0,5,0" Width="50"
|
||||
ToolTip.Tip="Browse for folder"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify name filter for the objects to export">
|
||||
<Label Content="Name filter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtExportNameFilter" Grid.Row="1" Grid.Column="1"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="This will export all objects to a sub-directory of the export path with name based on object type">
|
||||
<Label Content="Add object name to path"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkAddObjectType" Grid.Row="2" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"
|
||||
IsChecked="True" IsEnabled="False"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Export object assignments">
|
||||
<Label Content="Export Assignments"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkExportAssignments" Grid.Row="3" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="This will add the company name in Azure to the export path">
|
||||
<Label Content="Add company name to path"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkAddCompanyName" Grid.Row="4" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Depth of group-membership recursion. 1 (default) exports only the group directly assigned to the policy. 2 also exports groups that are direct members of the assigned group. Higher values mean more Graph calls and may hit throttling on large group trees.">
|
||||
<Label Content="Export nested group levels"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtNestedGroupLevels" Grid.Row="5" Grid.Column="1"
|
||||
Margin="0,5,0,0" Width="60" HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Group: pick whole categories (Configuration, Compliance, ...). API: pick individual policy types.">
|
||||
<Label Content="List by"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="6" Grid.Column="1" Orientation="Horizontal"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center">
|
||||
<RadioButton Name="rbBulkExportViewGroup" Content="Group"
|
||||
GroupName="BulkExportView" IsChecked="True"
|
||||
VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbBulkExportViewType" Content="API"
|
||||
GroupName="BulkExportView" Margin="15,0,0,0"
|
||||
VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Select the object types that should be exported">
|
||||
<Label Content="Objects to export"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Grid.Column="1" Name="dgObjectsToExport"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
Margin="0,0,0,5">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="True"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object type" Binding="{Binding Title}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Name="spExportSubMenu" Grid.Column="1" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right">
|
||||
<Button Name="btnExport" Content="Export" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,188 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkImportForm.xaml. Hosted via Show-ModalForm
|
||||
— Save / Import / Close live in this Grid and call back into
|
||||
Show-GraphBulkImportForm.
|
||||
|
||||
WPF -> Avalonia translations applied (same set as BulkExportForm.axaml):
|
||||
- Window/UserControl host -> Grid (modal-form host owns the chrome).
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup dropped — single grid
|
||||
ColumnDefinition Width="Auto"/"*" keeps rows aligned.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- chkAddObjectType is forced IsChecked=true and IsEnabled=false
|
||||
(matches WPF — bulk import always reads per-type subfolders).
|
||||
- cbImportType + lblImportType are visible by default here (WPF
|
||||
XAML had them Collapsed and the PS code flipped them visible —
|
||||
we just start visible).
|
||||
- DataGrid Columns are declared inline. WPF's
|
||||
Get-GridCheckboxColumn header-checkbox toggle-all has no
|
||||
Avalonia bindable equivalent — the chkSelectAll toolbar
|
||||
checkbox under spImportSubMenu replaces it (same convention
|
||||
as ImportForm.axaml / BulkExportForm.axaml).
|
||||
- Per-type AddUIImportExtensions (per-policy-type checkboxes)
|
||||
NOT wired — same constraint as Slice 3e / 4a.
|
||||
- DataContext two-way bindings dropped — IntuneManagerImportSettings
|
||||
has no INotifyPropertyChanged so two-way bindings would render
|
||||
but never round-trip. Same imperative round-trip as the rest
|
||||
of the port.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid Name="grdImportProperties">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="The root folder where exported files are stored">
|
||||
<Label Content="Import root"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<Grid Grid.Row="0" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Name="txtImportPath" Grid.Column="0"/>
|
||||
<Button Name="browseImportPath" Grid.Column="2" Content="..."
|
||||
Padding="5,0,5,0" Width="50"
|
||||
ToolTip.Tip="Browse for folder"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify name filter for the objects to import">
|
||||
<Label Content="Name filter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtImportNameFilter" Grid.Row="1" Grid.Column="1"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="This contains information about the exported environment e.g. Groups, ScopeTags etc. Note: This is only used when importing objects from a different tenant">
|
||||
<Label Content="Migration Table"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBlock Name="lblMigrationTableInfo" Grid.Row="2" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center" TextWrapping="Wrap"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="This will import objects from a sub-directory of the import path with name based on object type">
|
||||
<Label Content="Add object name to path"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkAddObjectType" Grid.Row="3" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"
|
||||
IsChecked="True" IsEnabled="False"/>
|
||||
|
||||
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="This will import ScopeTags. The ScopeTags must exist in the target environment before they can be assigned during import of an object">
|
||||
<Label Content="Assign Scope (Tags)"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkImportScopes" Grid.Row="4" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"
|
||||
IsChecked="True"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Import object assignments. Note: This will create groups that don't exist in the target environment">
|
||||
<Label Content="Import Assignments"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkImportAssignments" Grid.Row="5" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"
|
||||
IsChecked="True"/>
|
||||
|
||||
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Replaces IDs of dependency objects e.g. App Config references Applications. Increases import time but makes sure objects are imported correctly. Note: Referenced objects must exist!">
|
||||
<Label Content="Replace Dependency IDs"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkReplaceDependencyIDs" Grid.Row="6" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"
|
||||
IsChecked="True"/>
|
||||
|
||||
<Label Grid.Row="7" Grid.Column="0" Content="Import Type" Margin="0,5,5,0"
|
||||
VerticalAlignment="Center">
|
||||
<ToolTip.Tip>
|
||||
<TextBlock>
|
||||
Specify how files are imported.
|
||||
Always import: always try to import the object (no detection of existing objects, default).
|
||||
Skip if object exists: skip import if there is an existing object with the same name and type.
|
||||
Replace: if an object is detected it will be deleted and the assignments copied to the new imported object.
|
||||
Replace with assignments: if an object is detected it will be deleted and the assignments come from the import file.
|
||||
Update: if an object is detected, settings will be replaced from the import file.
|
||||
</TextBlock>
|
||||
</ToolTip.Tip>
|
||||
</Label>
|
||||
<ComboBox Name="cbImportType" DisplayMemberBinding="{Binding Name}" Grid.Row="7" Grid.Column="1"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Select the object types that should be imported">
|
||||
<Label Content="Objects to import"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Grid.Column="1" Name="dgObjectsToImport"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
Margin="0,0,0,5">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="True"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object type" Binding="{Binding Title}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Name="spImportSubMenu" Grid.Column="1" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right">
|
||||
<Button Name="btnImport" Content="Import" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,164 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/BulkScopeTagForm.xaml. Hosted via Show-ModalForm
|
||||
— Apply / Close live in this Grid and call back into
|
||||
Show-GraphBulkScopeTagForm.
|
||||
|
||||
WPF -> Avalonia translations (same set as BulkExport/BulkImport/BulkDelete):
|
||||
- Window/UserControl host -> Grid (modal-form host owns the chrome).
|
||||
- SharedSizeGroup dropped — explicit ColumnDefinition Width="Auto"/"*".
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- DataGrid columns inlined (no Get-GridCheckboxColumn header trick —
|
||||
chkSelectAll toolbar checkbox replaces it; default checked since
|
||||
scope-tag rows pre-select per the WPF original).
|
||||
- DynamicResource brushes (ControlBackgroundColor / TextColor) dropped —
|
||||
Avalonia theme drives ListBox / TextBlock backgrounds.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Top property block: Action / Cleanup / Filter / List-by -->
|
||||
<Grid Grid.Row="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Add: union of current and selected. Replace: overwrite. Remove: subtract selected from current.">
|
||||
<Label Content="Action"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal"
|
||||
VerticalAlignment="Center" Margin="0,5,0,5">
|
||||
<RadioButton Name="rbBulkScopeTagAdd" Content="Add" GroupName="BulkScopeTagAction" IsChecked="True" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbBulkScopeTagReplace" Content="Replace" GroupName="BulkScopeTagAction" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbBulkScopeTagRemove" Content="Remove" GroupName="BulkScopeTagAction" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="In addition to the chosen action, strip any tag ids from each policy that no longer resolve to a real scope tag in the tenant. Can also be used standalone (Add with no tags selected).">
|
||||
<Label Content="Cleanup orphans"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="1" Grid.Column="1" Name="chkBulkScopeTagCleanupOrphans"
|
||||
VerticalAlignment="Center" Margin="0,5,0,5"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Regex (or literal substring) matched against each policy's Name. Leave empty to target every listed policy.">
|
||||
<Label Content="Name filter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Name="txtBulkScopeTagNameFilter"
|
||||
Margin="0,5,0,5"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Group: pick whole categories (Configuration, Compliance, ...). API: pick individual policy types.">
|
||||
<Label Content="List by"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="3" Grid.Column="1" Orientation="Horizontal"
|
||||
VerticalAlignment="Center" Margin="0,5,0,5">
|
||||
<RadioButton Name="rbBulkScopeTagViewGroup" Content="Group" GroupName="BulkScopeTagView" IsChecked="True" VerticalAlignment="Center"/>
|
||||
<RadioButton Name="rbBulkScopeTagViewType" Content="API" GroupName="BulkScopeTagView" Margin="15,0,0,0" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- Middle: object DataGrid (left) + dual-list scope-tag picker (right) -->
|
||||
<Grid Grid.Row="1" Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Grid.Column="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,3" ToolTip.Tip="Select the policy types / groups that should be updated">
|
||||
<Label Content="Objects to update"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Name="dgBulkScopeTagObjects"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="True"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object type" Binding="{Binding Title}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Column="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,3" ToolTip.Tip="Double-click to add to the Selected list">
|
||||
<Label Content="Available scope tags"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ListBox Grid.Row="1" Name="lstBulkScopeTagAvailable"
|
||||
DisplayMemberBinding="{Binding Name}"
|
||||
SelectionMode="Multiple"/>
|
||||
<Grid Grid.Row="2" Margin="0,3,0,3">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Content="Selected scope tags" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Tags to use with the chosen action. Double-click a row to remove it."/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="5">
|
||||
<Button Name="btnBulkScopeTagAddTag" Content="Add ↓" MinWidth="80"
|
||||
ToolTip.Tip="Move the highlighted available tags to the Selected list"/>
|
||||
<Button Name="btnBulkScopeTagRemoveTag" Content="Remove ↑" MinWidth="80"
|
||||
ToolTip.Tip="Move the highlighted selected tags back to the Available list"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<ListBox Grid.Row="3" Name="lstBulkScopeTagSelected"
|
||||
DisplayMemberBinding="{Binding Name}"
|
||||
SelectionMode="Multiple"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<!-- Bottom: status + Select-all toggle + Apply / Close -->
|
||||
<Grid Grid.Row="2" Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Name="txtBulkScopeTagStatus" VerticalAlignment="Center"
|
||||
Opacity="0.8"/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button Name="btnBulkScopeTagApply" Content="Apply" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnBulkScopeTagClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,95 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CachedObjects.xaml. Top stats bar +
|
||||
Refresh button live in a Border header; rows render in a DataGrid
|
||||
bound through Update-CachedObjectsView (CacheRowItem CLR class —
|
||||
the binder can't reach PSCustomObject NoteProperties).
|
||||
|
||||
Selected-row detail pane uses DataContext binding to dgCachedObjects
|
||||
SelectedItem; Avalonia uses the #element-name shorthand.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="4*" MinHeight="300"/>
|
||||
<RowDefinition Height="3"/>
|
||||
<RowDefinition Height="1*" MinHeight="100"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Border Grid.Row="0" BorderBrush="{DynamicResource BorderColor}" BorderThickness="1"
|
||||
Background="{DynamicResource PanelBackgroundColor}" Padding="8" Margin="0,0,0,5">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Column="0" Orientation="Horizontal">
|
||||
<TextBlock Text="Entries: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtCacheEntries" Text="0" Margin="0,0,16,0"/>
|
||||
<TextBlock Text="Hits: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtCacheHits" Text="0" Margin="0,0,16,0"/>
|
||||
<TextBlock Text="Misses: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtCacheMisses" Text="0" Margin="0,0,16,0"/>
|
||||
<TextBlock Text="Total size: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtCacheBytes" Text="0 B" Margin="0,0,16,0"
|
||||
ToolTip.Tip="Approximate in-memory size of all cached values (UTF-8 JSON serialization, compressed)."/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Grid.Column="1" x:Name="btnRefreshCachedObjects" Content="Refresh"
|
||||
Padding="8,2" Margin="5,0,0,0" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Recompute cache totals and reload the list"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<DataGrid Grid.Row="1" x:Name="dgCachedObjects"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
IsReadOnly="True"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserResizeColumns="True"
|
||||
CanUserSortColumns="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Tags" Binding="{Binding TagsText}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Size" Binding="{Binding SizeText}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Persistent" Binding="{Binding Persistent}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="TimeOut" Binding="{Binding TimeOut, StringFormat=\{0:HH:mm.ss.fff\}}" Width="Auto"/>
|
||||
<DataGridTemplateColumn Header="Value" Width="*">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding ValueText}" TextWrapping="NoWrap"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<GridSplitter Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
|
||||
|
||||
<Grid Grid.Row="3" DataContext="{Binding #dgCachedObjects.SelectedItem}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Text="Name" Grid.Row="0" Grid.Column="0"/>
|
||||
<TextBlock Text="{Binding Name}" Grid.Row="0" Grid.Column="2"/>
|
||||
<Button x:Name="btnClearCachedObject" Content="Clear" Grid.Row="0" Grid.Column="3"
|
||||
Margin="0,5,5,5" Width="100"
|
||||
ToolTip.Tip="Clear the selected object from cache"/>
|
||||
|
||||
<TextBox Grid.Row="1" Grid.ColumnSpan="99" x:Name="txtCacheObjectInfo"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
IsReadOnly="True" AcceptsReturn="True" TextWrapping="Wrap"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,43 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title="Choose Cloud"
|
||||
SizeToContent="WidthAndHeight"
|
||||
CanResize="False"
|
||||
ShowInTaskbar="False"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
Background="{DynamicResource WindowBackgroundColor}">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CloudPickerMenu.xaml. Translation notes:
|
||||
- Window.Resources merging Default.xaml dropped — Avalonia loads themes
|
||||
globally via Application.Resources.MergedDictionaries.
|
||||
- SharedSizeGroup dropped (no Avalonia equivalent).
|
||||
- InfoIcon rectangle dropped.
|
||||
- FocusManager.FocusedElement binding dropped; Avalonia uses Focus()
|
||||
imperatively if needed.
|
||||
- ComboBox DisplayMemberPath / SelectedValuePath dropped — the PS code
|
||||
assigns an ItemTemplate and reads SelectedItem.Value directly.
|
||||
-->
|
||||
|
||||
<Grid Width="380" Margin="10">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Content="Cloud" Margin="0,5,5,0" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select the Microsoft cloud to sign in to: Public (Global), US Government (GCC High), US Government (DoD), or China (Vianet)."/>
|
||||
<ComboBox x:Name="cbCloud" DisplayMemberBinding="{Binding Name}" Grid.Column="1" Margin="0,5,5,0" HorizontalAlignment="Stretch"
|
||||
ToolTip.Tip="Select the Microsoft cloud to sign in to: Public (Global), US Government (GCC High), US Government (DoD), or China (Vianet)."/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.ColumnSpan="2" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,10,0,0">
|
||||
<Button x:Name="btnLogin" Content="Sign in" Width="100" Margin="5,0,0,0" IsDefault="True"/>
|
||||
<Button x:Name="btnCancel" Content="Cancel" Width="100" Margin="5,0,0,0" IsCancel="True"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,36 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CompareExportOptions.xaml. Used by both
|
||||
CompareExportFilesProvider ("export") and CompareIntuneWithExportProvider
|
||||
("IntuneWithExport") — shape is identical: name filter + export root
|
||||
path with browse button. SharedSizeGroup dropped; InfoIcon Rectangles are
|
||||
rendered as the info-icon glyph (Themes/Styles.axaml), with the description
|
||||
on the wrapping StackPanel so hovering the label shows it too.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify name filter for the objects to compare">
|
||||
<Label Content="Name filter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Name="txtCompareNameFilter"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="The root folder where exported files are stored. This sould be the Company Name folder if it was included in the export.">
|
||||
<Label Content="Export root"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Name="txtExportPath" Margin="0,5,5,0"/>
|
||||
<Button Grid.Row="1" Grid.Column="2" Name="browseExportPath" Content="..." Margin="0,5,0,0"
|
||||
Padding="5,2,5,2" Width="50" ToolTip.Tip="Browse for folder"/>
|
||||
</Grid>
|
||||
@@ -0,0 +1,44 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CompareExportedFilesOptions.xaml. Used by
|
||||
CompareExportedFoldersProvider ("exportedFolders"). SharedSizeGroup
|
||||
dropped; InfoIcon Rectangles are rendered as the info-icon glyph
|
||||
(Themes/Styles.axaml), with the description on the wrapping StackPanel
|
||||
so hovering the label shows it too.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify name filter for the objects to compare">
|
||||
<Label Content="Name filter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Name="txtCompareNameFilter"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="The root folder where exported files are stored. This sould be the Company Name folder if it was included in the export.">
|
||||
<Label Content="Source root"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Name="txtExportPathSource" Margin="0,5,5,0"/>
|
||||
<Button Grid.Row="1" Grid.Column="2" Name="browseExportPathSource" Content="..." Margin="0,5,0,0"
|
||||
Padding="5,2,5,2" Width="50" ToolTip.Tip="Browse for folder"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="The folder with exported object that should be compared with the source">
|
||||
<Label Content="Compare root"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Name="txtExportPathCompare" Margin="0,5,5,0"/>
|
||||
<Button Grid.Row="2" Grid.Column="2" Name="browseExportPathCompare" Content="..." Margin="0,5,0,0"
|
||||
Padding="5,2,5,2" Width="50" ToolTip.Tip="Browse for folder"/>
|
||||
</Grid>
|
||||
@@ -0,0 +1,16 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CompareFileOptions.xaml. Used as
|
||||
ccCompareInputOptions.Content when the user picks "File" in
|
||||
cbCompareInput. Slice 3d2.
|
||||
-->
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Name="txtCompareFile" VerticalAlignment="Center"/>
|
||||
<Button Grid.Column="2" Name="browseCompareObject" Padding="5,2,5,2" Width="50"
|
||||
Content="..." ToolTip.Tip="Browse for file"/>
|
||||
</Grid>
|
||||
@@ -0,0 +1,179 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CompareForm.xaml. Hosted via Show-ModalForm
|
||||
rather than as a standalone Window — Swap/Compare/Close live in this
|
||||
Grid and call back into Show-GraphCompareForm.
|
||||
|
||||
Slices 3d1+3d2+3d3 scope:
|
||||
- TabControl: Options + Compare Output.
|
||||
- Intune-vs-Intune AND file compare paths. cbCompareInput swaps
|
||||
ccCompareInputOptions content between
|
||||
CompareIntuneObjectOptions.axaml and CompareFileOptions.axaml.
|
||||
- btnCompareSave / btnCompareCopy wired (SaveFilePicker, csv/json
|
||||
provider FormatRows, clipboard via Get-CompareCsvInfo).
|
||||
- Match-based row coloring done via DataGrid.LoadingRow handler
|
||||
in PS code (no DataTrigger); Row.Foreground inheritance
|
||||
cascades to cells.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup dropped — TitleColumn
|
||||
uses ColumnDefinition Width="Auto".
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- DataGridRowStyle / CellStyle Triggers + DataTriggers stripped.
|
||||
- {DynamicResource SystemColors.*BrushKey} highlight overrides
|
||||
dropped — Avalonia uses different theme keys for selection.
|
||||
- <Bold>/<LineBreak/> inline runs in the help TextBlock are kept
|
||||
verbatim — Avalonia parses them as XAML inline elements.
|
||||
- ComboBox DisplayMemberPath / SelectedValuePath dropped; the PS
|
||||
code projects PSCustomObject sources into [SettingsListItem] CLR
|
||||
instances (avalonia-binding-needs-clr-types) and assigns an
|
||||
ItemTemplate, then reads SelectedItem.Value imperatively.
|
||||
- Window -> Grid (modal-form host owns the chrome).
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TabControl Name="tabCompare" SelectedIndex="0" Margin="0,0,0,5">
|
||||
|
||||
<TabItem Header="Options">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Padding="0,0,5,0">
|
||||
<Grid VerticalAlignment="Stretch">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Current Intune object">
|
||||
<Label Content="Source object"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBlock Name="txtIntuneObject" Grid.Row="0" Grid.Column="1" Margin="0,9,5,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Select whether to compare against an exported file or another Intune object">
|
||||
<Label Content="Compare with"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Name="cbCompareInput" DisplayMemberBinding="{Binding Name}" Grid.Row="1" Grid.Column="1" Margin="0,5,5,0"
|
||||
MinWidth="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="The object to compare against">
|
||||
<Label Name="lblCompareObject" Content="Compare object"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ContentControl Name="ccCompareInputOptions" Grid.Row="2" Grid.Column="1" Margin="0,5,5,0"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify how objects should be compared">
|
||||
<Label Content="Comparison Type"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Name="cbCompareType" DisplayMemberBinding="{Binding Name}" Grid.Row="3" Grid.Column="1" Margin="0,5,5,0"
|
||||
MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the output file format when saving compare results">
|
||||
<Label Content="Output format"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Name="cbSingleCompareOutputFormat" DisplayMemberBinding="{Binding Name}" Grid.Row="4" Grid.Column="1" Margin="0,5,5,0"
|
||||
MinWidth="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Skip mismatch coloring for displayName, description, id, createdDateTime, lastModifiedDateTime and version. These will almost always differ between two objects.">
|
||||
<Label Content="Ignore core properties"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkIgnoreCoreProperties" Grid.Row="5" Grid.Column="1" Margin="0,9,5,0"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the character to use for separating values for properties with more than one value (documentation comparison)">
|
||||
<Label Content="Multi-Value Delimiter"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Name="cbCompareMultiValueDelimiter" DisplayMemberBinding="{Binding Name}" Grid.Row="6" Grid.Column="1" Margin="0,5,5,0"
|
||||
MinWidth="200" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Skip comparing assignments.">
|
||||
<Label Content="Skip Assignments"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkSkipCompareAssignments" Grid.Row="7" Grid.Column="1" Margin="0,9,5,0"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
|
||||
<TextBlock Grid.Row="8" Grid.ColumnSpan="2" TextWrapping="Wrap" Margin="5,20,5,0">
|
||||
The <Bold>Property</Bold> comparison method is a quick and easy option for objects that are based on a static set of properties <LineBreak/>
|
||||
e.g. Configuration Profiles, Compliance Polcies etc.<LineBreak/>This method will compare each property of the objects. <LineBreak/>
|
||||
The downside of this method is that it could be difficult to match the property name with the setting in th UI.
|
||||
<LineBreak/>
|
||||
The <Bold>Documentation</Bold> method will use the documentation engine and compare property values as they are displayed in the portal.<LineBreak/>
|
||||
This is recommended for objects with dynamic settings e.g. Settings Catalog and Endpoint security objects. <LineBreak/>
|
||||
The downside of this method is that it could be slow and that some property-based objects are not supported.
|
||||
</TextBlock>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="Compare Output">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<DockPanel Grid.Row="0" LastChildFill="False" Margin="0,0,0,5">
|
||||
<TextBlock Text="Show:" VerticalAlignment="Center" Margin="5,0,5,0" DockPanel.Dock="Left"/>
|
||||
<ComboBox Name="cbCompareFilter" DisplayMemberBinding="{Binding Name}" Width="160" VerticalAlignment="Center" DockPanel.Dock="Left"/>
|
||||
<TextBlock Name="txtCompareSummary" VerticalAlignment="Center"
|
||||
Margin="20,0,0,0" DockPanel.Dock="Left"/>
|
||||
</DockPanel>
|
||||
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Name="dgCompareInfo"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Match" Binding="{Binding MatchGlyph}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Property" Binding="{Binding PropertyName}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Category" Binding="{Binding Category}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="SubCategory" Binding="{Binding SubCategory}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Intune Object" Binding="{Binding Object1Value}" IsReadOnly="True" Width="1*"/>
|
||||
<DataGridTextColumn Header="Compare Object" Binding="{Binding Object2Value}" IsReadOnly="True" Width="1*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="5,5,0,0">
|
||||
<Button Name="btnCompareSave" Content="Save" Width="100" Margin="5,0,0,0"
|
||||
ToolTip.Tip="Save compare results"/>
|
||||
<Button Name="btnCompareCopy" Content="Copy" Width="100" Margin="5,0,0,0"
|
||||
ToolTip.Tip="Copy CSV content to clipboard"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
</TabControl>
|
||||
|
||||
<StackPanel Name="spCompareSubMenu" Grid.Row="1" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right">
|
||||
<Button Name="btnSwap" Content="Swap" Width="100" Margin="5,0,0,0"
|
||||
ToolTip.Tip="Swap source and compare objects"/>
|
||||
<Button Name="btnStartCompare" Content="Compare" Width="100" Margin="5,0,0,0"
|
||||
ToolTip.Tip="Compare objects"/>
|
||||
<Button Name="btnClose" Content="Close" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,20 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CompareIntuneObjectOptions.xaml. Used as
|
||||
ccCompareInputOptions.Content when the user picks "Intune Object"
|
||||
in cbCompareInput.
|
||||
|
||||
WPF -> Avalonia:
|
||||
- default xmlns swapped for the Avalonia URI.
|
||||
- TextBlock + browse Button stay 1:1 with WPF.
|
||||
-->
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Name="txtCompareIntuneObject" VerticalAlignment="Center" Margin="2,0,0,0"/>
|
||||
<Button Grid.Column="2" Name="browseIntuneObject" Padding="5,2,5,2" Width="50"
|
||||
Content="..." ToolTip.Tip="Browse for Intune object"/>
|
||||
</Grid>
|
||||
@@ -0,0 +1,43 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CompareNamedOptions.xaml. Used by
|
||||
CompareNamedObjectsProvider ("name"). SharedSizeGroup dropped;
|
||||
InfoIcon Rectangles are rendered as the info-icon glyph
|
||||
(Themes/Styles.axaml), with the description on the wrapping StackPanel
|
||||
so hovering the label shows it too.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the pattern of the source objects e.g. Test -">
|
||||
<Label Content="Source object name pattern"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Name="txtCompareSource"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify the pattern of the objects that the source should be compared with e.g. Prod -">
|
||||
<Label Content="Compare object name pattern"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Name="txtCompareWith"
|
||||
Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="The folder where compare files will be saved. Default is the MyDocuments folder">
|
||||
<Label Content="Save folder"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Name="txtSavePath" Margin="0,5,5,0"/>
|
||||
<Button Grid.Row="2" Grid.Column="2" Name="browseSavePath" Content="..." Margin="0,5,0,0"
|
||||
Padding="5,2,5,2" Width="50" ToolTip.Tip="Browse for folder"/>
|
||||
</Grid>
|
||||
@@ -0,0 +1,106 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="10" MinWidth="380">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/CopyDialog.xaml. Hosted via Show-ModalForm
|
||||
rather than as a standalone Window — the OK/Cancel buttons live in
|
||||
this Grid and call back into Copy-IntuneManagerPolicy.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Window -> Grid (modal-form host owns the chrome).
|
||||
- Window.Resources merging dropped; themes load globally.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- ComboBox SelectedValuePath dropped; the PS code reads
|
||||
SelectedItem.Id directly via the CopyDialogTenantItem class.
|
||||
- DataTemplate is assigned in code (see Copy-IntuneManagerPolicy)
|
||||
because XAML can't reference TenantNameEx without a class import.
|
||||
- IsDefault / IsCancel on Button replaced with explicit KeyDown
|
||||
handlers in Copy-IntuneManagerPolicy.
|
||||
- Scope-tag dual-list panels (Slice 3b2): hidden by default; the
|
||||
PS code flips IsVisible=True when the source policy type
|
||||
defines ScopeTagProperty. ListBoxes get a Name-binding
|
||||
ItemTemplate assigned in code (Avalonia binder needs CLR types
|
||||
— see [[avalonia-binding-needs-clr-types]] — so PS projects
|
||||
tags into [CopyDialogScopeTagItem]).
|
||||
- WPF's MouseDoubleClick on ListBox -> Avalonia DoubleTapped.
|
||||
-->
|
||||
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Destination tenant">
|
||||
<Label Content="Tenant"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Name="cbDestinationTenant" DisplayMemberBinding="{Binding TenantNameEx}" Margin="0,5,5,0" Grid.Row="0" Grid.Column="1"
|
||||
MinWidth="250" HorizontalAlignment="Stretch"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Name of the object">
|
||||
<Label Content="New Name"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtObjectName" Margin="0,5,5,0" Grid.Row="1" Grid.Column="1" MinWidth="250"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Top" ToolTip.Tip="Description for the object">
|
||||
<Label Content="Description"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtObjectDescription" Margin="0,5,5,0" Grid.Row="2" Grid.Column="1"
|
||||
AcceptsReturn="True" MinWidth="250" MinHeight="100"
|
||||
TextWrapping="Wrap"/>
|
||||
|
||||
<!-- Scope-tag dual-list (Slice 3b2 populates these). Hidden by default. -->
|
||||
<StackPanel Name="pnlCopyScopeTagsLabel" Orientation="Horizontal"
|
||||
Margin="0,10,5,0" Grid.Row="3" Grid.ColumnSpan="2"
|
||||
HorizontalAlignment="Left" IsVisible="False">
|
||||
<Label Content="Scope Tags"
|
||||
ToolTip.Tip="Pick which scope tags the new object will have. Re-loads from the destination tenant when you change Tenant above; assignments are matched by name across tenants."/>
|
||||
</StackPanel>
|
||||
|
||||
<Grid Name="grdCopyScopeTags" Grid.Row="4" Grid.ColumnSpan="2"
|
||||
Height="180" Margin="0,5,5,0" IsVisible="False">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label Content="Available" Grid.Row="0" Grid.Column="0" Padding="0,0,0,2" FontSize="11"/>
|
||||
<Label Content="Assigned" Grid.Row="0" Grid.Column="2" Padding="0,0,0,2" FontSize="11"/>
|
||||
|
||||
<ListBox Name="lstCopyAvailableScopeTags" DisplayMemberBinding="{Binding Name}" Grid.Row="1" Grid.Column="0"
|
||||
SelectionMode="Multiple" Margin="0,0,5,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Vertical"
|
||||
VerticalAlignment="Center" Margin="0,0,5,0">
|
||||
<Button Name="btnCopyScopeTagAssign" Content=">" Width="40" Margin="0,0,0,5"
|
||||
ToolTip.Tip="Assign selected tag(s)"/>
|
||||
<Button Name="btnCopyScopeTagUnassign" Content="<" Width="40"
|
||||
ToolTip.Tip="Unassign selected tag(s)"/>
|
||||
</StackPanel>
|
||||
|
||||
<ListBox Name="lstCopyAssignedScopeTags" DisplayMemberBinding="{Binding Name}" Grid.Row="1" Grid.Column="2"
|
||||
SelectionMode="Multiple" Margin="5,0,0,0"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.ColumnSpan="2" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,15,0,0">
|
||||
<Button Name="btnOk" Content="_OK" MinWidth="80" Margin="0,0,10,0"/>
|
||||
<Button Name="btnCancel" Content="_Cancel" MinWidth="80"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,38 @@
|
||||
<Border xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
BorderBrush="Gray" BorderThickness="1" Padding="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/EditScriptDialog.xaml. Loaded by
|
||||
Show-AvaloniaScriptEditor in Extensions/IntuneManagerExtensionHooks.ps1.
|
||||
Stacked on top of the Object Details modal via Show-ModalForm — same
|
||||
nested-overlay trick as Show-ObjectPickerDialog.
|
||||
-->
|
||||
|
||||
<Grid HorizontalAlignment="Stretch" Name="grdModalContainer" VerticalAlignment="Stretch">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Border Background="LightGray" BorderThickness="0">
|
||||
<TextBlock Name="txtEditScriptTitle" Margin="5" FontWeight="Bold"/>
|
||||
</Border>
|
||||
|
||||
<TextBox Name="txtScriptText" Grid.Row="1"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Auto"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
MinWidth="600" MinHeight="300" Margin="0,5,0,0"
|
||||
AcceptsReturn="True" AcceptsTab="True"
|
||||
FontFamily="Consolas,Courier New,monospace"
|
||||
TextWrapping="NoWrap"/>
|
||||
|
||||
<StackPanel Name="pnlButtons" Grid.Row="2" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,5,0,0">
|
||||
<Button Name="btnSaveScriptEdit" Content="Save" MinWidth="100"
|
||||
Margin="0,0,5,0" ToolTip.Tip="Save updated script"/>
|
||||
<Button Name="btnCancelScriptEdit" Content="Cancel" MinWidth="100"
|
||||
ToolTip.Tip="Cancel any changes"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
@@ -0,0 +1,46 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="20"
|
||||
MaxWidth="520">
|
||||
<!--
|
||||
Startup notice shown once on macOS and Linux (and on Windows when
|
||||
IM_EXPERIMENTAL_NOTICE=1, so it can be reviewed during development).
|
||||
Hosted by Show-ModalForm -HideButtons from
|
||||
UI/Avalonia/Extensions/ExperimentalPlatformNoticeAvalonia.ps1, which owns
|
||||
every control name below. There is no WPF twin on purpose: the notice
|
||||
never renders on Windows, where WPF is the only backend.
|
||||
-->
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBlock Name="txtNoticeHeading"
|
||||
Text="Experimental platform"
|
||||
FontSize="18"
|
||||
FontWeight="SemiBold"
|
||||
Margin="0,0,0,12"/>
|
||||
|
||||
<TextBlock Name="txtNoticeBody"
|
||||
Grid.Row="1"
|
||||
TextWrapping="Wrap"
|
||||
LineHeight="19"
|
||||
Margin="0,0,0,16"/>
|
||||
|
||||
<CheckBox Name="chkHideNoticeAgain"
|
||||
Grid.Row="2"
|
||||
Content="Do not show this message again"
|
||||
Margin="0,0,0,16"/>
|
||||
|
||||
<StackPanel Grid.Row="3"
|
||||
Orientation="Horizontal"
|
||||
HorizontalAlignment="Right"
|
||||
Spacing="10">
|
||||
<Button Name="btnNoticeOk"
|
||||
IsDefault="True"
|
||||
MinWidth="80"
|
||||
Content="_OK"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,93 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/ExportForm.xaml. Hosted via Show-ModalForm
|
||||
rather than as a standalone Window — the Export/Cancel buttons live
|
||||
in this Grid and call back into Show-IntuneManagerExportForm.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Window -> Grid (modal-form host owns the chrome).
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup dropped — sized via
|
||||
ColumnDefinition Width="Auto"/"*". Single grid column for labels
|
||||
keeps the rows aligned.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- {Binding ExportFolder, Mode=TwoWay} et al replaced by imperative
|
||||
property assignment in Show-IntuneManagerExportForm — the
|
||||
IntuneManagerExportSettings class has no INotifyPropertyChanged,
|
||||
so bindings would render but never round-trip. Same convention
|
||||
as IntuneToolsAssignmentsFolderOptions.axaml.
|
||||
- Per-type AddUIExportExtensions hook (Script/PolicyFile/Application
|
||||
checkboxes) is *not* called yet — the WPF extensions construct
|
||||
[System.Windows.Controls.CheckBox] directly and would crash on
|
||||
Avalonia. Slice 3c covers the core form only; per-type extensions
|
||||
need a parallel AddUIExportExtensionsAvalonia hook (deferred).
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid Name="grdExportProperties" Margin="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Root folder where exported files should be stored">
|
||||
<Label Content="Export root"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<Grid Grid.Row="0" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Name="txtExportPath" Grid.Column="0"/>
|
||||
<Button Name="browseExportPath" Grid.Column="2" Content="..."
|
||||
Padding="5,0,5,0" Width="50"
|
||||
ToolTip.Tip="Browse for folder"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Export each object type to its own sub-directory of the export path">
|
||||
<Label Content="Add object name to path"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkAddObjectType" Grid.Row="1" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Add the Azure tenant company name to the export path">
|
||||
<Label Content="Add company name to path"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkAddCompanyName" Grid.Row="2" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Export assignments and add information to a migration table so they can be imported into other environments">
|
||||
<Label Content="Export Assignments"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkExportAssignments" Grid.Row="3" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Name="spExportSubMenu" Grid.Row="1" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,5,0,5">
|
||||
<Label Name="lblSelectedObject" Margin="5,0,0,0" VerticalAlignment="Center"/>
|
||||
<Button Name="btnExportSelected" Content="Export Selected" Width="120"
|
||||
Margin="5,0,0,0" VerticalAlignment="Center"/>
|
||||
<Button Name="btnExportAll" Content="Export All" Width="100"
|
||||
Margin="5,0,0,0" VerticalAlignment="Center"/>
|
||||
<Button Name="btnCancel" Content="Cancel" Width="100"
|
||||
Margin="5,0,0,0" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,141 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/GraphCallsPanel.xaml. Stats / status-code
|
||||
WrapPanels / filter-indicator live in a Border header. The call list
|
||||
binds against GraphCallRowItem (Update-GraphCallsView projects the
|
||||
underlying $script:AllGraphCalls PSCustomObjects into CLR rows so
|
||||
DataTemplates resolve). The nested batch-request grid binds against
|
||||
SelectedItem.BatchRequests using Avalonia's #element-name shorthand
|
||||
— the row class exposes BatchRequests as List[GraphBatchRequestRowItem]
|
||||
so the typed enumerable satisfies ItemsSource.
|
||||
|
||||
WPF Visibility="Collapsed" -> IsVisible="False" on pnlFilterIndicator.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="4*" MinHeight="300"/>
|
||||
<RowDefinition Height="3"/>
|
||||
<RowDefinition Height="1*" MinHeight="100"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Border Grid.Row="0" BorderBrush="{DynamicResource BorderColor}" BorderThickness="1"
|
||||
Background="{DynamicResource PanelBackgroundColor}" Padding="8" Margin="0,0,0,5">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal">
|
||||
<TextBlock Text="Calls: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtTotalCalls" Text="0" Margin="0,0,16,0"/>
|
||||
<TextBlock Text="Downloaded: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtTotalMB" Text="0 MB" Margin="0,0,16,0"/>
|
||||
<TextBlock Text="Objects: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtTotalObjects" Text="0" Margin="0,0,16,0"/>
|
||||
<TextBlock Text="Total time: " FontWeight="Bold" Margin="0,0,2,0"/>
|
||||
<TextBlock x:Name="txtTotalTime" Text="0s" Margin="0,0,16,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Grid.Row="0" Grid.Column="1" x:Name="btnRefreshGraphCalls" Content="Refresh"
|
||||
Padding="8,2" Margin="5,0,0,0" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Recompute totals and reload the call list"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="0,4,0,0">
|
||||
<TextBlock Text="HTTP status: " FontWeight="Bold" Margin="0,0,2,0" VerticalAlignment="Center"/>
|
||||
<WrapPanel x:Name="pnlHttpStatuses" Orientation="Horizontal"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="0,2,0,0">
|
||||
<TextBlock Text="Batch status: " FontWeight="Bold" Margin="0,0,2,0" VerticalAlignment="Center"/>
|
||||
<WrapPanel x:Name="pnlBatchStatuses" Orientation="Horizontal"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel x:Name="pnlFilterIndicator" Grid.Row="3" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="0,6,0,0" IsVisible="False">
|
||||
<TextBlock Text="Active filter: " FontWeight="Bold" Margin="0,0,2,0" VerticalAlignment="Center"/>
|
||||
<TextBlock x:Name="txtActiveFilter" Text="" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
||||
<Button x:Name="btnClearGraphCallsFilter" Content="Clear" Padding="6,1" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Remove the filter and show all calls"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<DataGrid Grid.Row="1" x:Name="dgGraphCalls"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
IsReadOnly="True"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserResizeColumns="True"
|
||||
CanUserSortColumns="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Provider" Binding="{Binding Provider}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Date" Binding="{Binding Time, StringFormat=\{0:d\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Time" Binding="{Binding Time, StringFormat=\{0:HH:mm.ss\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Duration (ms)" Binding="{Binding Duration, StringFormat=\{0:N0\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="KB" Binding="{Binding KB, StringFormat=\{0:N1\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Objects" Binding="{Binding ObjectCount, StringFormat=\{0:N0\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Pages" Binding="{Binding PageCount, StringFormat=\{0:N0\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="StatusCode" Binding="{Binding StatusCode}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Batch Errors" Binding="{Binding BatchErrorSummary}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Method" Binding="{Binding Method}" Width="Auto"/>
|
||||
<DataGridTemplateColumn Header="URL" Width="*">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding URL}" TextWrapping="NoWrap"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<GridSplitter Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
|
||||
|
||||
<Grid Grid.Row="3" x:Name="dgGraphCallObject">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Text="Batch info" Grid.Row="0" Grid.Column="0"/>
|
||||
|
||||
<DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
IsReadOnly="True"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserResizeColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
ItemsSource="{Binding #dgGraphCalls.SelectedItem.BatchRequests}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Id" Binding="{Binding Id}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="KB" Binding="{Binding KB, StringFormat=\{0:N1\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Objects" Binding="{Binding ObjectCount, StringFormat=\{0:N0\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Pages" Binding="{Binding PageCount, StringFormat=\{0:N0\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="StatusCode" Binding="{Binding StatusCode}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Method" Binding="{Binding Method}" Width="Auto"/>
|
||||
<DataGridTemplateColumn Header="URL" Width="*">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding URL}" TextWrapping="NoWrap"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,13 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="29" Width="33">
|
||||
<Path Fill="#3E3E3E" Data="M23.1 21.5c0 1.4-1.1 2.5-2.5 2.5h-11c-1.4 0-2.5-1.1-2.5-2.5v-19C7.1 1.1 8.2 0 9.6 0h11c1.4 0 2.5 1.1 2.5 2.5v19z" />
|
||||
<Path Fill="#5AB3D9" Data="M21.1 4h-12v17h12V4z" />
|
||||
<Path Fill="#FFFFFF" Data="M7.1 2.5v16.3L21 0H9.6C8.2 0 7.1 1.1 7.1 2.5z" Opacity="0.15" />
|
||||
<Path Fill="#FFFFFF" Data="M25.9 27.6V9.8h-8.5c-.7 0-1.3.6-1.3 1.3v16.4h9.8v.1z" Opacity="0.4" />
|
||||
<Path Fill="#0072c6" Data="M29 11.6c-.2-.3-.6-.3-.6-.3H18.1s-.4 0-.5.3v20.1c0 .5.6.5.6.5h10.3s.6 0 .6-.5V11.8c-.1-.1-.1-.2-.1-.2z" />
|
||||
<Path Fill="#FFFFFF" Data="M20.6 12.5h-1.8v3.6h1.8v-3.6zm3.5 0h-1.8v3.6h1.8v-3.6zm3.6 0h-1.8v3.6h1.8v-3.6zm-7.1 5.3h-1.8v3.6h1.8v-3.6zm3.5 0h-1.8v3.6h1.8v-3.6zm3.6 0h-1.8v3.6h1.8v-3.6zm-7.1 5.3h-1.8v3.6h1.8v-3.6zm3.5 0h-1.8v3.6h1.8v-3.6zm0 5.3h-1.8V32h1.8v-3.6zm3.6-5.3h-1.8v3.6h1.8v-3.6z" />
|
||||
<Path Fill="#FFFFFF" Data="M9.6 22.2l-.1-.2c1.2-.8 2.1-2.2 2.1-3.7 0-2.1-1.4-3.8-3.4-4.3H8c-.2 0-.5-.1-.7-.1-2.4 0-4.4 2-4.4 4.4 0 .3 0 .6.1.9v.1c.3 1.2 1 2.1 1.9 2.7v.2H0V32h14.3v-9.8H9.6z" Opacity="0.4" />
|
||||
<Path Fill="#804998" Data="M10.7 18.2c0 2-1.6 3.6-3.6 3.6s-3.6-1.6-3.6-3.6 1.6-3.6 3.6-3.6c2.1 0 3.6 1.7 3.6 3.6zM9.8 23l-2.6 3.7L4.6 23H.8v9h12.7v-9H9.8z" />
|
||||
<Path Fill="#FFFFFF" Data="M3.6 18.2c0 2 1.5 3.5 3.5 3.6l.9-7c-.2-.1-.5-.1-.8-.1-2-.1-3.6 1.6-3.6 3.5zm1 4.8H.8v9h5l.8-6.1-2-2.9z" Opacity="0.15" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,9 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#1D1D1D" Data="M43.75 43.75H6.25A6.25 6.25 0 010 37.5v-25a6.25 6.25 0 016.25-6.25h37.5A6.25 6.25 0 0150 12.5v25a6.25 6.25 0 01-6.25 6.25z" />
|
||||
<Path Fill="#B7D333" Data="M6.25 12.5h37.5v25H6.25z" />
|
||||
<Path Fill="#7FBA42" Data="M43.75 37.5H6.25v-6.25l37.5-12.5z" />
|
||||
<Path Fill="#FFFFFF" Data="M40.625 15.625v18.75H9.375v-18.75h31.25M43.75 12.5H6.25v25h37.5v-25z" Opacity="0.4" />
|
||||
<Path Fill="#9E9FA0" Data="M18.75 37.5h12.5v3.125h-12.5z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,6 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#2072B8" Data="M0 0h12.5v12.5H0V0zm0 15.625h12.5v12.5H0v-12.5zM0 31.25h12.5v12.5H0v-12.5zM15.625 0h12.5v12.5h-12.5V0zM31.25 0h12.5v12.5h-12.5V0zM16.788 38.29l3.822-3.422.008-1.332-2.637-2.286h-2.356v12.5h3.378zm2.276-13.546l5.126.288.946-.935-.362-5.086 3.351-1.364v-2.022h-12.5v12.5h2.012zm14.609-4.134l1.332.009 3.345-3.856 5.4 2.283v-3.421h-12.5v2.277z" />
|
||||
<Path Fill="#7B7B7B" Data="M48.464 42.171l1.431-3.386-.414-.361-3.126-2.71.019-2.744 3.52-3.15-1.385-3.405-.543.038-4.13.292-1.926-1.955.262-4.714-3.386-1.431-.359.414-2.714 3.128-2.744-.019-3.15-3.522-3.405 1.385.04.543.29 4.13-1.951 1.928-4.718-.266-1.431 3.389.414.357 3.126 2.714-.017 2.744-3.519 3.15 1.382 3.405.547-.038 4.126-.292 1.928 1.951-.262 4.718 3.388 1.427.357-.41 2.714-3.128 2.742.023 3.15 3.519 3.405-1.385-.038-.546-.292-4.126 1.955-1.928 4.714.261zm-17.119-.968a7.522 7.522 0 01-4.006-9.857 7.522 7.522 0 019.857-4.008 7.522 7.522 0 014.007 9.857 7.524 7.524 0 01-9.858 4.008" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,7 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#2072B8" Data="M0 0h12.5v12.5H0V0zm0 15.625h12.5v12.5H0v-12.5zM0 31.25h12.5v12.5H0v-12.5zM15.625 0h12.5v12.5h-12.5V0zM31.25 0h12.5v12.5h-12.5V0zm-7.812 37.846V31.25h-7.813v12.5h11.161c-1.926-2.052-3.348-4.172-3.348-5.904zm0-18.989l1.492-.067a29.146 29.146 0 003.195-.344v-2.82h-12.5v12.5h7.813v-9.269zm11.853-3.232H31.25v2.081c1.477-.465 2.911-1.128 4.041-2.081zm8.459 2.08v-2.08h-4.035c1.133.952 2.563 1.614 4.035 2.08z" />
|
||||
<Path Fill="#7FBA42" Data="M37.509 50C35.851 49.674 25 41.763 25 37.846V20.351c2.313-.103 9.37-.746 12.502-4.726 3.15 3.983 10.189 4.623 12.498 4.726v17.494C50 43.382 38.92 49.791 37.509 50z" />
|
||||
<Path Data="M27.944 42.749C26.039 40.738 25 39.014 25 37.846V20.351c2.313-.103 9.369-.746 12.501-4.725 1.285 1.631 3.345 2.868 6.148 3.694L27.944 42.749z" Fill="#FFFFFF" Opacity="0.17"/>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,26 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#FFFFFF" Data="M40.5 11h4v1h-4z" />
|
||||
<Path Fill="#E5E5E5" Data="M20.5 49c-1.103 0-2-.897-2-2V7c0-1.103.897-2 2-2h24c1.103 0 2 .897 2 2v40c0 1.103-.897 2-2 2h-24z" />
|
||||
<Path Fill="#7A7A7A" Data="M44.5 6c.551 0 1 .449 1 1v40c0 .551-.449 1-1 1h-24c-.551 0-1-.449-1-1V7c0-.551.449-1 1-1h24m0-2h-24a3 3 0 00-3 3v40a3 3 0 003 3h24a3 3 0 003-3V7a3 3 0 00-3-3z" />
|
||||
<Path Fill="#FFFFFF" Data="M20.5 49c-1.103 0-2-.897-2-2V7c0-1.103.897-2 2-2h24c1.103 0 2 .897 2 2v40c0 1.103-.897 2-2 2h-24z" />
|
||||
<Path Fill="#7A7A7A" Data="M44.5 6c.551 0 1 .449 1 1v40c0 .551-.449 1-1 1h-24c-.551 0-1-.449-1-1V7c0-.551.449-1 1-1h24m0-2h-24a3 3 0 00-3 3v40a3 3 0 003 3h24a3 3 0 003-3V7a3 3 0 00-3-3z" />
|
||||
<Path Fill="#7A7A7A" Data="M19.5 6h26v6h-26z" />
|
||||
<Path Fill="#FFFFFF" Data="M29.5 7h6v1h-6z" />
|
||||
<Ellipse Fill="#57a300" Canvas.Left="23.5" Canvas.Top="14" Width="18" Height="18" />
|
||||
<Path Fill="#0072c0" Data="M30.833 28.667v-4h-4v-3.334h4v-4h3.334v4h4v3.334h-4v4z" />
|
||||
<Path Fill="#FFFFFF" Data="M37.5 22h-4v-4h-2v4h-4v2h4v4h2v-4h4z" />
|
||||
<Path Fill="#3898C6" Data="M24.5 35h16v2h-16zm0 4h12v2h-12zm0 4h14v2h-14z" />
|
||||
<Path Fill="#FFFFFF" Data="M25.5 7h4v1h-4z" />
|
||||
<Path Fill="#E5E5E5" Data="M5.5 45c-1.103 0-2-.897-2-2V3c0-1.103.897-2 2-2h24c1.103 0 2 .897 2 2v40c0 1.103-.897 2-2 2h-24z" />
|
||||
<Path Fill="#7A7A7A" Data="M29.5 2c.551 0 1 .449 1 1v40c0 .551-.449 1-1 1h-24c-.551 0-1-.449-1-1V3c0-.551.449-1 1-1h24m0-2h-24a3 3 0 00-3 3v40a3 3 0 003 3h24a3 3 0 003-3V3a3 3 0 00-3-3z" />
|
||||
<Path Fill="#FFFFFF" Data="M5.5 45c-1.103 0-2-.897-2-2V3c0-1.103.897-2 2-2h24c1.103 0 2 .897 2 2v40c0 1.103-.897 2-2 2h-24z" />
|
||||
<Path Fill="#7A7A7A" Data="M29.5 2c.551 0 1 .449 1 1v40c0 .551-.449 1-1 1h-24c-.551 0-1-.449-1-1V3c0-.551.449-1 1-1h24m0-2h-24a3 3 0 00-3 3v40a3 3 0 003 3h24a3 3 0 003-3V3a3 3 0 00-3-3z" />
|
||||
<Path Fill="#7A7A7A" Data="M4.5 2h26v6h-26z" />
|
||||
<Path Fill="#FFFFFF" Data="M14.5 3h6v1h-6z" />
|
||||
<Ellipse Fill="#57a300" Canvas.Left="8.5" Canvas.Top="10" Width="18" Height="18" />
|
||||
<Path Fill="#0072c0" Data="M15.833 24.667v-4h-4v-3.334h4v-4h3.334v4h4v3.334h-4v4z" />
|
||||
<Path Fill="#FFFFFF" Data="M22.5 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z" />
|
||||
<Path Fill="#3898C6" Data="M9.5 31h16v2h-16zm0 4h12v2h-12zm0 4h14v2h-14z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,60 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="3fe769a7-5a01-4d2d-8fe0-e8d731b660ed" StartPoint="0.0754000023007393,0.0494999997317791" EndPoint="0.0754000023007393,0.147200003266335">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.22" Color="#2BCDF2" />
|
||||
<GradientStop Offset="0.47" Color="#2ACAF0" />
|
||||
<GradientStop Offset="0.63" Color="#28C2E7" />
|
||||
<GradientStop Offset="0.76" Color="#24B3DA" />
|
||||
<GradientStop Offset="0.88" Color="#1F9EC6" />
|
||||
<GradientStop Offset="0.99" Color="#1883AD" />
|
||||
<GradientStop Offset="1" Color="#177FA9" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="3fe769a7-5a01-4d2d-8fe0-e8d731b660ee" StartPoint="0.521659970283508,0" EndPoint="0.56852000951767,0.566280007362366">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.22" Color="#2BCDF2" />
|
||||
<GradientStop Offset="0.47" Color="#2ACAF0" />
|
||||
<GradientStop Offset="0.63" Color="#28C2E7" />
|
||||
<GradientStop Offset="0.76" Color="#24B3DA" />
|
||||
<GradientStop Offset="0.88" Color="#1F9EC6" />
|
||||
<GradientStop Offset="0.99" Color="#1883AD" />
|
||||
<GradientStop Offset="1" Color="#177FA9" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="3fe769a7-5a01-4d2d-8fe0-e8d731b660ef" StartPoint="0.132200002670288,0.208000004291534" EndPoint="0.132200002670288,0.0612999983131886">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Color="#006DCD" />
|
||||
<GradientStop Offset="0.11" Color="#1175D3" />
|
||||
<GradientStop Offset="0.34" Color="#2E83DE" />
|
||||
<GradientStop Offset="0.56" Color="#428DE6" />
|
||||
<GradientStop Offset="0.79" Color="#4F93EA" />
|
||||
<GradientStop Offset="1" Color="#5395EC" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="3fe769a7-5a01-4d2d-8fe0-e8d731b660f0" StartPoint="0.132200002670288,0.168400004506111" EndPoint="0.132200002670288,0.0844999998807907">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Color="#CBE7FF" />
|
||||
<GradientStop Offset="1" Color="#EDFFFC" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Canvas>
|
||||
<Path Fill="{StaticResource 3fe769a7-5a01-4d2d-8fe0-e8d731b660ed}" Data="M12.37 13a1 1 0 001.05-1v-.12c-.42-3.29-2.29-6-5.87-6S2 8.09 1.66 11.79A1.06 1.06 0 002.6 13h9.77z" />
|
||||
<Path Fill="#FFFFFF" Data="M7.55 6.6a3.24 3.24 0 01-1.79-.53l1.77 4.62L9.29 6.1a3.24 3.24 0 01-1.74.5z" Opacity="0.8"/>
|
||||
<Path Fill="{StaticResource 3fe769a7-5a01-4d2d-8fe0-e8d731b660ee}" Data="M7.55 6.6a3.3 3.3 0 100-6.6 3.3 3.3 0 000 6.6z" />
|
||||
<Path Fill="{StaticResource 3fe769a7-5a01-4d2d-8fe0-e8d731b660ef}" Data="M16.02 7.57h-5.61a.32.32 0 00-.32.32v9.8c0 .177.143.32.32.32h5.61a.32.32 0 00.32-.32v-9.8a.32.32 0 00-.32-.32z" />
|
||||
<Path Fill="#EFEFEF" Data="M13.4 17.19h-.36a.17.17 0 00-.17.17v.26c0 .094.076.17.17.17h.36a.17.17 0 00.17-.17v-.26a.17.17 0 00-.17-.17zm.45-9.27h-1.26a.09.09 0 00-.09.09v.01c0 .05.04.09.09.09h1.26c.05 0 .09-.04.09-.09v-.01a.09.09 0 00-.09-.09z" />
|
||||
<Path Fill="{StaticResource 3fe769a7-5a01-4d2d-8fe0-e8d731b660f0}" Data="M15.64 8.45H10.8a.12.12 0 00-.12.12v8.15c0 .066.054.12.12.12h4.84a.12.12 0 00.12-.12V8.57a.12.12 0 00-.12-.12z" Opacity="0.9"/>
|
||||
</Canvas>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,11 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="52">
|
||||
<Path Fill="#1D1D1D" Data="M28.125 46.875h-25A3.125 3.125 0 0 1 0 43.75V3.125A3.125 3.125 0 0 1 3.125 0h25a3.125 3.125 0 0 1 3.125 3.125V43.75a3.125 3.125 0 0 1-3.125 3.125z" />
|
||||
<Path Fill="#5AB3D9" Data="M3.125 3.125h25v37.5h-25z" />
|
||||
<Path Fill="#3898C6" Data="M28.125 40.625h-25V32.67l25-18.465z" />
|
||||
<Path Data="M25 6.25V37.5H6.25V6.25H25m3.125-3.125h-25v37.5h25v-37.5z" Fill="#FFFFFF" />
|
||||
<Path Fill="#E4E4E4" Data="M12.5 40.625h6.25v3.125H12.5z" />
|
||||
<Path Fill="#7FBA42" Data="M37.5 15.625h6.25V50H37.5z" />
|
||||
<Path Fill="#7FBA42" Data="m40.625 6.25-9.375 12.5H50z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,8 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#5AB3D9" Data="M43.75 50H6.25A6.25 6.25 0 010 43.75V6.25A6.25 6.25 0 016.25 0h37.5A6.25 6.25 0 0150 6.25v37.5A6.25 6.25 0 0143.75 50z" />
|
||||
<Path Fill="#3898C6" Data="M43.75 3.125a3.129 3.129 0 013.125 3.125v37.5a3.129 3.129 0 01-3.125 3.125H6.25a3.129 3.129 0 01-3.125-3.125V6.25A3.129 3.129 0 016.25 3.125h37.5m0-3.125H6.25A6.25 6.25 0 000 6.25v37.5A6.25 6.25 0 006.25 50h37.5A6.25 6.25 0 0050 43.75V6.25A6.25 6.25 0 0043.75 0z" />
|
||||
<Path Fill="#FFFFFF" Data="M7.105 16.318l-.722-.776a.507.507 0 01.028-.722l2.101-1.928a.512.512 0 01.348-.137.51.51 0 01.381.163l5.77 6.134 9.922-12.611a.53.53 0 01.727-.086l2.265 1.739a.5.5 0 01.195.34.494.494 0 01-.105.375L15.266 25l-8.161-8.682zm33.604 11.807h-.084v6.334a3.041 3.041 0 01-3.041 3.041h-9.459v.084a3.041 3.041 0 003.041 3.041h9.544a3.041 3.041 0 003.041-3.041v-6.419a3.042 3.042 0 00-3.042-3.04z" />
|
||||
<Path Fill="#FFFFFF" Data="M34.46 34.375h-9.544a3.04 3.04 0 01-3.04-3.04v-6.419a3.04 3.04 0 013.04-3.04h9.544a3.04 3.04 0 013.04 3.04v6.419a3.04 3.04 0 01-3.04 3.04z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,18 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="a2546c3d-06f2-4d81-b3fa-b5b62d9f6f89" StartPoint="0.0900000035762787,0.170000001788139" EndPoint="0.0900000035762787,1">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#0078d4" />
|
||||
<GradientStop Offset="0.16" Color="#1380da" />
|
||||
<GradientStop Offset="0.53" Color="#3c91e5" />
|
||||
<GradientStop Offset="0.82" Color="#559cec" />
|
||||
<GradientStop Offset="1" Color="#5ea0ef" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Path Fill="{StaticResource a2546c3d-06f2-4d81-b3fa-b5b62d9f6f89}" Data="M6.6 12.2h4.8V17H6.6zM1 5.8h4.8V1H1.67a.67.67 0 00-.67.67zM1.67 17H5.8v-4.8H1v4.13a.67.67 0 00.67.67zM1 11.4h4.8V6.6H1zM12.2 17h4.13a.67.67 0 00.67-.67V12.2h-4.8zm-5.6-5.6h4.8V6.6H6.6zm5.6 0H17V6.6h-4.8zm0-10.4v4.8H17V1.67a.67.67 0 00-.67-.67zM6.6 5.8h4.8V1H6.6z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,29 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="cf7d088c-fc7f-4c2c-8ffa-0b4b450e304a" StartPoint="0.0752099975943565,0.0372200012207031" EndPoint="0.0752099975943565,0.170129999518394">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#5ea0ef" />
|
||||
<GradientStop Offset="1" Color="#0078d4" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="cf7d088c-fc7f-4c2c-8ffa-0b4b450e304b" StartPoint="0.143889993429184,0.0797099992632866" EndPoint="0.143889993429184,0.151940003037453">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#86d633" />
|
||||
<GradientStop Offset="1" Color="#76bc2d" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Path Fill="{StaticResource cf7d088c-fc7f-4c2c-8ffa-0b4b450e304a}" Data="M12.9 12.721l-2.5-2.492a.731.731 0 01-.217-.522v-.563a.74.74 0 01.739-.739h4.116V3.113a.455.455 0 00-.478-.428H.479A.456.456 0 000 3.113v9.7a.455.455 0 00.479.428H12.9z" />
|
||||
<Path Fill="#0078d4" Data="M.451 2.685h14.14a.429.429 0 01.45.4V4.7H0V3.088a.431.431 0 01.451-.403z" Opacity="0.7"/>
|
||||
<Ellipse Canvas.Left="1.182" Canvas.Top="6.266" Width="1.228" Height="1.228" Fill="#FFFFFF" Opacity="0.7"/>
|
||||
<Ellipse Canvas.Left="1.182" Canvas.Top="8.6269999999999989" Width="1.228" Height="1.228" Fill="#FFFFFF" Opacity="0.5"/>
|
||||
<Path Data="M10.186 9.707v-.563a.721.721 0 01.115-.371H3.6a.267.267 0 00-.266.267v.408a.266.266 0 00.266.267h6.589z" Fill="#FFFFFF" Opacity="0.5"/>
|
||||
<Rectangle Width="0.534" Height="0.942" Canvas.Left="3.333" Canvas.Top="6.416" Fill="#FFFFFF" Opacity="0.7"/>
|
||||
<Path Fill="{StaticResource cf7d088c-fc7f-4c2c-8ffa-0b4b450e304b}" Data="M18 9.707v-.563A.148.148 0 0017.852 9h-6.927a.148.148 0 00-.148.148v.563a.149.149 0 00.044.1l2.622 2.621a.153.153 0 01.043.105v2.63a.148.148 0 00.148.148h1.51a.148.148 0 00.148-.148v-2.63a.148.148 0 01.043-.105l2.622-2.621A.153.153 0 0018 9.707z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,13 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Data="M32 41c0 1.657-1.323 3-2.956 3H6.956C5.323 44 4 42.657 4 41V3c0-1.657 1.323-3 2.956-3h22.088C30.677 0 32 1.343 32 3v38z" Fill="#3e3e3e" />
|
||||
<Path Data="M6 5h24v33H6z" Fill="#59b4d9" />
|
||||
<Path Data="M23 2.817c0 .408-.53.738-1.186.738h-7.625c-.657 0-1.189-.33-1.189-.738s.532-.739 1.189-.739h7.625c.656 0 1.186.331 1.186.739" Fill="#ffffff" />
|
||||
<Path Data="M26.021 0H7a3 3 0 00-3 3v38a3 3 0 003 3h2.6L26.021 0z" Fill="#ffffff" Opacity=".15" />
|
||||
<Path Data="M32 11v7H18v-7z" Fill="#ffffff" />
|
||||
<Path Data="M19 12h20v5H19z" Fill="#804998" />
|
||||
<Path Data="M37 21.5v-14l10.5 6.462z" Fill="#804998" />
|
||||
<Path Stroke="#3999C6" StrokeLineCap="Round" StrokeJoin="Round" StrokeThickness="2" Data="M21.042 26.042h22.917v22.917H21.042z" Fill="#ffffff" />
|
||||
<Path Fill="#3898C6" Data="M25 30h15v3H25zm0 6h12v3H25zm0 6h15v3H25z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,5 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="16" Width="16">
|
||||
<Path StrokeThickness="1.5" Fill="#707070" Data="M14.5 3h-1v11.5a1.3 1.3 0 0 1-.1.6l-.3.5-.5.3H3.4l-.5-.3-.3-.5a1.3 1.3 0 0 1-.1-.6V3h-1V2h4V1a.6.6 0 0 1 .1-.4l.2-.3.3-.2h3.8l.3.2.2.3a.6.6 0 0 1 .1.4v1h4zm-2 0h-9v11.5a.6.6 0 0 0 .1.4h8.8a.6.6 0 0 0 .1-.4zm-6 10h-1V5h1zm0-11h3V1h-3zm2 11h-1V5h1zm2 0h-1V5h1z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,39 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="b04c7825-41db-4c22-aba2-f5c44b816ed3" StartPoint="0.0356499999761581,0.170000001788139" EndPoint="0.0356499999761581,0.0375300012528896">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#fea11b" />
|
||||
<GradientStop Offset="0.127" Color="#feac19" />
|
||||
<GradientStop Offset="0.562" Color="#ffcb12" />
|
||||
<GradientStop Offset="0.804" Color="#ffd70f" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="e3016781-9cad-4dda-b769-212e01557f4d" StartPoint="0.0900000035762787,0.170000001788139" EndPoint="0.0900000035762787,0.0375300012528896">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#5e9624" />
|
||||
<GradientStop Offset="0.546" Color="#6dad2a" />
|
||||
<GradientStop Offset="0.999" Color="#76bc2d" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="a5967715-2146-4485-8c36-86a8b43a627b" StartPoint="0.144350007176399,0.170000001788139" EndPoint="0.144350007176399,0.0375300012528896">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#1b93eb" />
|
||||
<GradientStop Offset="1" Color="#6bb9f2" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Rectangle Width="4.034" Height="13.247" Canvas.Left="1.367" Canvas.Top="3.753" Fill="{StaticResource b04c7825-41db-4c22-aba2-f5c44b816ed3}" RadiusX="0.517" RadiusY="0.517" />
|
||||
<Rectangle Width="4.034" Height="13.247" Canvas.Left="6.802" Canvas.Top="3.753" Fill="{StaticResource e3016781-9cad-4dda-b769-212e01557f4d}" RadiusX="0.517" RadiusY="0.517" />
|
||||
<Rectangle Width="4.034" Height="13.247" Canvas.Left="12.238" Canvas.Top="3.753" Fill="{StaticResource a5967715-2146-4485-8c36-86a8b43a627b}" RadiusX="0.517" RadiusY="0.517" />
|
||||
<Path Fill="#faa21d" Data="M1.617 1h3.895a.251.251 0 01.251.251v2.871h-4.4V1.251A.251.251 0 011.617 1z" />
|
||||
<Path Fill="#86d633" Data="M7.053 1h3.894a.251.251 0 01.251.251v2.871H6.8V1.251A.251.251 0 017.053 1z" />
|
||||
<Path Fill="#5ea0ef" Data="M12.488 1h3.894a.251.251 0 01.251.251v2.871h-4.4V1.251A.251.251 0 0112.488 1z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,7 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Data="M43.75 3.125H9.375v43.75h31.25v-37.5h3.125z" Fill="#FFFFFF" />
|
||||
<Path Fill="#5AB2D7" Data="M34.375 12.5V9.375H12.5V12.5h21.875zm0 6.25v-3.125H12.5v3.125h21.875zm0 6.25v-3.125H12.5V25h21.875zm0 6.25v-3.125H12.5v3.125h21.875z" />
|
||||
<Path Fill="#5AB2D7" Data="M43.75 0H15.626C9.376 0 6.25 3.125 6.25 9.375L6.251 37.5H6.25a6.25 6.25 0 100 12.5H37.5c3.393 0 6.25-2.857 6.25-6.25V9.375h5.383A6.185 6.185 0 0050 6.25 6.25 6.25 0 0043.75 0zm0 3.126c-.006.003-3.124 1.549-3.124 6.249V37.5h-.001v4.688a4.688 4.688 0 01-9.376 0c0-2.038 1.309-4.042 3.125-4.688H9.376L9.375 9.375c0-3.889 2.396-6.25 6.251-6.25l28.124.001z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,7 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#57A300" Data="M38.185 5.96C27.169 4.745 25.326 0 25.326 0S22.847 6.242 7 6.242v25.611c0 3.097 1.721 5.997 4.104 8.532 5.402 5.748 14.223 9.616 14.223 9.616s18.327-8.029 18.327-18.149V6.242c-2.038 0-3.851-.103-5.469-.282z" />
|
||||
<Path Fill="#B8D432" Data="M29.86 16.543L38.185 5.96C27.169 4.745 25.326 0 25.326 0S22.847 6.242 7 6.242v25.611c0 3.097 1.721 5.997 4.104 8.532l6.154-7.822 12.602-16.02z" Opacity=".4" />
|
||||
<Path Fill="#FFFFFF" Data="M32.595 24.46h-1.066v-3.552a6.697 6.697 0 0 0-1.669-4.45c-.039-.043-.074-.09-.112-.133-1.107-1.186-2.683-1.948-4.422-1.947-1.736-.001-3.312.761-4.419 1.947a6.697 6.697 0 0 0-1.783 4.582v3.553h-1.065a.8.8 0 0 0-.801.801v9.392c0 .442.359.801.801.801h14.536a.801.801 0 0 0 .801-.801v-9.391a.801.801 0 0 0-.801-.802zm-4.011.001h-5.02l.001-.001H22.07v-3.552c0-1.022.386-1.927.988-2.57.605-.643 1.395-1.013 2.268-1.013.874 0 1.665.37 2.27 1.013.143.153.271.323.389.504l-.001.001c.373.579.6 1.288.6 2.064v3.554z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,20 @@
|
||||
<Viewbox Width="18" Height="18" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Viewbox.Resources>
|
||||
<LinearGradientBrush x:Key="82ede37b-be1f-4ec6-a8d4-aefcb532a259" StartPoint="0,11.9927997589111" EndPoint="0,11.9345598220825">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#5ea0ef" />
|
||||
<GradientStop Offset="1" Color="#0078d4" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Viewbox.Resources>
|
||||
<Canvas Height="18" Width="18">
|
||||
<Path Fill="{StaticResource 82ede37b-be1f-4ec6-a8d4-aefcb532a259}" Data="M0 7.146L.011 10.5a.578.578 0 00.176.43l3.238 2.8a.77.77 0 00.409.169l13.581.039a.588.588 0 00.585-.59l-.014-8.635a.6.6 0 00-.591-.592l-13.61-.053a.89.89 0 00-.38.141L.205 6.7A.569.569 0 000 7.146zm3.134.925a1.076 1.076 0 11-1.522 0l.007-.007a1.067 1.067 0 011.508 0z" />
|
||||
<Path Fill="#005ba1" Data="M1.279 9.921a1.554 1.554 0 100-2.2 1.554 1.554 0 000 2.2zM1.893 8.1a.874.874 0 11-.241.241.891.891 0 01.241-.241z" />
|
||||
<Path Data="M15.762 6.978h-5.286a.522.522 0 100 1.044h5.338a.522.522 0 100-1.044z" Fill="#ffffff" Opacity="0.6" />
|
||||
<Path Data="M6.74 8.787a.245.245 0 00.347 0l2.1-2.1a.245.245 0 000-.347l-.163-.163a.246.246 0 00-.346 0L6.914 7.936l-.607-.606a.249.249 0 00-.346 0L5.8 7.5a.246.246 0 000 .346z" Fill="#ffffff" Opacity="0.8" />
|
||||
<Path Data="M15.788 10.016H10.5a.522.522 0 000 1.044h5.338a.522.522 0 100-1.044z" Fill="#ffffff" Opacity="0.6" />
|
||||
<Path Data="M6.767 11.825a.244.244 0 00.346 0l2.1-2.1a.247.247 0 000-.347l-.164-.163a.245.245 0 00-.346 0L6.94 10.974l-.606-.607a.251.251 0 00-.346 0l-.166.166a.245.245 0 000 .347z" Fill="#ffffff" Opacity="0.8" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,9 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#3898C6" Data="M0 44.963c0 1.056.898 1.912 2.007 1.912h45.986c1.109 0 2.007-.857 2.007-1.912v-33.61H0v33.61z" />
|
||||
<Path Fill="#7B7B7B" Data="M47.993 3.125H2.007A2.014 2.014 0 000 5.149V12.5h50V5.149a2.015 2.015 0 00-2.007-2.024z" />
|
||||
<Path Data="M3.125 12.5h43.75v31.25H3.125z" Fill="#FFFFFF" />
|
||||
<Path Fill="#3898C6" Data="M25 18.75h15.625v3.125H25zM25 25h12.5v3.125H25zm0 6.25h15.625v3.125H25zM9.375 18.75V37.5h12.5V18.75h-12.5zm9.375 15.625H12.5v-12.5h6.25v12.5z" />
|
||||
<Path Fill="#FFFFFF" Data="M43.75 6.25h3.125v3.125H43.75zm-6.25 0h3.125v3.125H37.5zm-6.25 0h3.125v3.125H31.25z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,38 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="aea576e5-fef8-4bf5-a6dd-590c075a08c5" StartPoint="0.0834000036120415,0.119599997997284" EndPoint="0.0834000036120415,0.0186000000685453">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#d2ebff" />
|
||||
<GradientStop Offset="1" Color="#f0fffd" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="ae1611cd-4cf1-4ed1-b5e1-db19220ee586" StartPoint="0.141499996185303,0.204099997878075" EndPoint="0.141499996185303,0.0233999993652105">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#0078d4" />
|
||||
<GradientStop Offset="0.17" Color="#1c84dc" />
|
||||
<GradientStop Offset="0.38" Color="#3990e4" />
|
||||
<GradientStop Offset="0.59" Color="#4d99ea" />
|
||||
<GradientStop Offset="0.8" Color="#5a9eee" />
|
||||
<GradientStop Offset="1" Color="#5ea0ef" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="bb0a651b-bb97-4569-a23e-5fed56c1e359" StartPoint="0.141499996185303,0.155300006270409" EndPoint="0.141499996185303,0.0520000010728836">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops />
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Rectangle Width="16.68" Height="11.87" Canvas.Top="1.03" Fill="#0078d4" RadiusX="0.6" RadiusY="0.6" />
|
||||
<Rectangle Width="14.74" Height="10.1" Canvas.Left="0.97" Canvas.Top="1.86" Fill="{StaticResource aea576e5-fef8-4bf5-a6dd-590c075a08c5}" Opacity='0.9' RadiusX="0.3" RadiusY="0.3" />
|
||||
<Rectangle Width="7.7" Height="12.85" Canvas.Left="10.3" Canvas.Top="4.12" Fill="{StaticResource ae1611cd-4cf1-4ed1-b5e1-db19220ee586}" RadiusX="0.3" RadiusY="0.3" />
|
||||
<Rectangle Width="1.77" Height="0.24" Canvas.Left="13.27" Canvas.Top="4.55" Fill="#f2f2f2" RadiusX="0.11" RadiusY="0.11" />
|
||||
<Rectangle Width="6.25" Height="10.33" Canvas.Left="11.03" Canvas.Top="5.2" Fill="{StaticResource bb0a651b-bb97-4569-a23e-5fed56c1e359}" Opacity='0.9' RadiusX="0.14" RadiusY="0.14" />
|
||||
<Rectangle Width="1.77" Height="0.24" Canvas.Left="7.48" Canvas.Top="1.4" Fill="#f2f2f2" RadiusX="0.11" RadiusY="0.11" />
|
||||
<Rectangle Width=".86" Height="0.73" Canvas.Left="13.72" Canvas.Top="15.96" Fill="#f2f2f2" RadiusX="0.2" RadiusY="0.2" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,19 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="A" StartPoint="0.0703999996185303,0.75" EndPoint="0.0703999996185303,0.163499996066093">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.18" Color="#5ea0ef" />
|
||||
<GradientStop Offset="1" Color="#0078d4" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Path Data="M14 8c0 4.58-5.53 8.26-6.73 9a.47.47 0 0 1-.46 0C5.6 16.25.07 12.57.07 8V2.48a.44.44 0 0 1 .43-.43C4.8 1.93 3.8 0 7 0s2.23 1.9 6.54 2a.44.44 0 0 1 .42.43z" Fill="#5ea0ef" />
|
||||
<Path Data="M13.42 8c0 4.2-5.08 7.57-6.18 8.26a.4.4 0 0 1-.42 0C5.72 15.6.65 12.23.65 8V3A.39.39 0 0 1 1 2.59C5 2.48 4.07.75 7 .75s2.05 1.73 6 1.84a.4.4 0 0 1 .4.4z" Fill="#60b0ef" />
|
||||
<Path Data="M7 8.55V.75c3 0 2.05 1.73 6 1.84a.41.41 0 0 1 .4.4V8.5zm0 0H.67c.4 4 5.1 7.1 6.15 7.75a.34.34 0 0 0 .17.05H7z" Fill="{StaticResource A}" />
|
||||
<Path Data="M1 2.6C5 2.48 4.07.75 7 .75v7.8H.67V3A.4.4 0 0 1 1 2.59zm12.4 5.95H7v7.8a.34.34 0 0 0 .17-.05c1.13-.66 5.83-3.8 6.22-7.75z" Fill="#0078d4" />
|
||||
<Path Data="M14.13 17.8l.33-1.08.63-.37 1.1.48.7-.72V16l-.5-1 .3-.68 1.1-.4.12-.05v-1h-.14l-1.08-.33-.36-.63.47-1.1-.72-.7H16l-1 .5-.7-.3-.44-1.22h-1l-.05.14-.33 1.08-.7.3-1.18-.54-.7.72.07.13.52 1-.28.7-1.2.45v1l.14.05 1.08.33.3.7L10 16.3l.73.7.13-.07 1-.53.7.28.52 1.3h1zm-1.63-3.23a1.45 1.45 0 1 1 2 0 1.44 1.44 0 0 1-2 0z" Fill="#949494" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,15 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Data="M46 33c0 1.657-1.359 3-3.036 3H3.036C1.359 36 0 34.657 0 33V3c0-1.657 1.359-3 3.036-3h39.928C44.641 0 46 1.343 46 3v30z" Fill="#3E3E3E" />
|
||||
<Path Fill="#3898C6" Data="M2.962 5H43v26H2.962z" />
|
||||
<Path Data="M31 0H3a3 3 0 00-3 3v30a3 3 0 003 3h12L31 0z" Fill="#ffffff" Opacity=".15" />
|
||||
<Path Data="M26 2.689c0 .38-.308.688-.688.688H20.89a.689.689 0 110-1.377h4.422c.38 0 .688.309.688.689" Fill="#ffffff" />
|
||||
<Path Data="M50 47.545C50 48.901 48.913 50 47.572 50H29.428C28.087 50 27 48.901 27 47.545v-31.09C27 15.099 28.087 14 29.428 14h18.143C48.913 14 50 15.099 50 16.455v31.09z" Fill="#3E3E3E" />
|
||||
<Path Fill="#5AB3D9" Data="M29 18h19v27H29z" />
|
||||
<Path Data="M42.607 16.171c0 .335-.436.606-.974.606H35.37c-.54 0-.977-.271-.977-.606 0-.335.437-.607.977-.607h6.263c.538 0 .974.272.974.607" Fill="#ffffff" />
|
||||
<Path Data="M45.089 14H29.464A2.46 2.46 0 0027 16.455v31.091A2.458 2.458 0 0029.464 50H31.6l13.489-36z" Opacity=".15" Fill="#ffffff" />
|
||||
<Ellipse Canvas.Left="8" Canvas.Top="20" Width="27" Height="27" Fill="#B82025" />
|
||||
<Path Fill="#2A3280" Data="M21.5 21C28.393 21 34 26.607 34 33.5S28.393 46 21.5 46 9 40.393 9 33.5 14.607 21 21.5 21m0-1C14.044 20 8 26.044 8 33.5S14.044 47 21.5 47 35 40.956 35 33.5 28.956 20 21.5 20z" Opacity=".5" />
|
||||
<Path Data="M22.856 36l.679-11H19.46l.679 11h2.717zm-1.354 2.1a1.903 1.903 0 00-1.905 1.899c0 1.05.854 1.901 1.905 1.901a1.902 1.902 0 001.904-1.901 1.902 1.902 0 00-1.904-1.899z" Fill="#ffffff" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,11 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Data="M0 44.062C0 45.132.898 46 2.007 46h45.986C49.102 46 50 45.132 50 44.062V11H0v33.062z" Fill="#3999C6" />
|
||||
<Path Data="M47.993 3H2.007C.898 3 0 3.966 0 5.159V12h50V5.159C50 3.966 49.101 3 47.993 3z" Fill="#7a7a7a" />
|
||||
<Path Data="M2.014 3C.906 3 .007 3.861.007 4.923v39.153C.007 45.138.906 46 2.014 46h17.188L41.62 3H2.014z" Fill="#ffffff" Opacity=".1"/>
|
||||
<Path Data="M3 12h44v31H3z" Fill="#ffffff" />
|
||||
<Path Data="M25 19h16v3H25zm0 12h16v3H25z" Fill="#3999C6" />
|
||||
<Path Data="M44 6h3v3h-3zm-6 0h3v3h-3zm-6 0h3v3h-3z" Fill="#ffffff" />
|
||||
<Path Data="M7.161 32.753a.463.463 0 01-.123-.334.46.46 0 01.151-.315l1.21-1.119a.456.456 0 01.31-.122c.129 0 .245.052.334.149l3.208 3.44 5.622-7.202a.448.448 0 01.36-.176c.103 0 .199.034.28.098l1.31 1.011a.43.43 0 01.176.302c.01.1-.002.236-.108.346l-7.233 9.262a.33.33 0 01-.501.022l-4.996-5.362zm0-12.072a.463.463 0 01-.123-.334.46.46 0 01.151-.315l1.21-1.119a.456.456 0 01.31-.122c.129 0 .245.052.334.149l3.208 3.44 5.622-7.202a.448.448 0 01.36-.176c.103 0 .199.034.28.098l1.31 1.011a.43.43 0 01.176.302c.01.1-.002.236-.108.346l-7.233 9.262a.33.33 0 01-.501.022l-4.996-5.362z" Fill="#3999C6" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,10 @@
|
||||
<Viewbox Width="18" Height="18" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Width="18" Height="18">
|
||||
<Path Fill="#FF225086" Data="m3.802,14.032c.388,.242,1.033,.511,1.715,.511 .621,0,1.198,-.18,1.676,-.487 0,0,.001,0,.002,-.001 l1.805,-1.128 v4.073 c-.286,0,-.574,-.078,-.824,-.234 l-4.374,-2.734 Z"/>
|
||||
<Path Fill="#FF66DDFF" Data="m7.853,1.507 L.353,9.967 c-.579,.654,-.428,1.642,.323,2.111 0,0,2.776,1.735,3.126,1.954 .388,.242,1.033,.511,1.715,.511 .621,0,1.198,-.18,1.676,-.487 0,0,.001,0,.002,-.001 l1.805,-1.128 -4.364,-2.728 4.365,-4.924 V1 s0,0,0,0 c-.424,0,-.847,.169,-1.147,.507 Z"/>
|
||||
<Polygon Fill="#FFcbf8ff" Points="4.636,10.199 4.688,10.231 9,12.927 9.001,12.927 9.001,5.276 9,5.275 4.636,10.199"/>
|
||||
<Path Fill="#FF074793" Data="m17.324,12.078 c.751,-.469,.902,-1.457,.323,-2.111 l-4.921,-5.551 c-.397,-.185,-.842,-.291,-1.313,-.291 -.925,0,-1.752,.399,-2.302,1.026 l-.109,.123 h0 s4.364,4.924,4.364,4.924 h0 s0,0,0,0 l-4.365,2.728 v4.073 c.287,0,.573,-.078,.823,-.234 l7.5,-4.688 Z"/>
|
||||
<Path Fill="#FF0294e4" Data="m9.001,1 v4.275 s.109,-.123,.109,-.123 c.55,-.627,1.377,-1.026,2.302,-1.026 .472,0,.916,.107,1.313,.291 l-2.579,-2.909 c-.299,-.338,-.723,-.507,-1.146,-.507 Z"/>
|
||||
<Polygon Fill="#FF96bcc2" Points="13.365,10.199 9.001,5.276 9.001,12.926 13.365,10.199"/>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,5 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#2072B8" Data="M25 4.885v16.99h21.875V3.124zM3.125 6.647v15.228h18.75V5.137zM25 41.989v-16.99h21.875V43.75zM3.125 40.227V24.999h18.75v16.738z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,26 @@
|
||||
<Viewbox Width="18" Height="18" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Viewbox.Resources>
|
||||
<LinearGradientBrush x:Key="blueBase" StartPoint="171.5,396.0" EndPoint="314.3,90.6">
|
||||
<GradientStop Offset="0.02" Color="#FF1169DA"/>
|
||||
<GradientStop Offset="0.44" Color="#FF0151BD"/>
|
||||
<GradientStop Offset="0.61" Color="#FF014DB7"/>
|
||||
<GradientStop Offset="1" Color="#FF126AD9"/>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="cyanWave" StartPoint="114.7,97.5" EndPoint="182.1,383.7">
|
||||
<GradientStop Offset="0" Color="#FF92EEFE"/>
|
||||
<GradientStop Offset="0.56" Color="#FF35DDFF"/>
|
||||
<GradientStop Offset="1" Color="#FF08B1F9"/>
|
||||
</LinearGradientBrush>
|
||||
</Viewbox.Resources>
|
||||
<Canvas Width="401" Height="396" ClipToBounds="True">
|
||||
<!-- Outer wave shape (dark blue) -->
|
||||
<Path Fill="{StaticResource blueBase}"
|
||||
Data="M0.685 65.852 C0.685 14.765 67.486 -13.203 111.616 19.408 L207.551 90.254 L288.514 44.373 C331.305 21.039 399.874 37.775 400.685 101.559 L400.685 336.622 C400.685 387.71 335.845 414.343 291.715 381.732 L194.031 309.34 L112.973 355.23 C69.778 378.784 0.753 360.714 0.753 298.637 C0.753 224.124 0.685 252.734 0.685 65.852 Z"/>
|
||||
<!-- Inner face (medium cyan — creates the 3-D fold effect) -->
|
||||
<Path Fill="#FF23C0FE"
|
||||
Data="M111.616 19.408 C67.486 -13.203 0.685 14.765 0.685 65.852 V295.742 C0.685 290.153 3.533 279.026 3.533 279.026 C16.695 236.001 72.649 219.869 111.36 248.223 L291.715 381.732 C335.845 414.343 400.685 387.71 400.685 336.622 V101.559 C400.685 145.201 343.643 189.011 289.755 151.051 Z"/>
|
||||
<!-- Foreground wave highlight (light cyan gradient) -->
|
||||
<Path Fill="{StaticResource cyanWave}"
|
||||
Data="M111.616 149.691 C67.486 117.08 0.685 145.048 0.685 196.135 L0.685 65.852 C0.685 14.765 67.486 -13.203 111.616 19.408 C170.996 63.289 230.374 107.171 289.755 151.051 C343.643 189.011 400.685 145.201 400.685 101.559 V234.89 C400.685 285.978 333.885 313.946 289.755 281.334 C230.374 237.454 170.996 193.572 111.616 149.691 Z"/>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,11 @@
|
||||
<Viewbox Width="18" Height="18" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Path Data="M0 0h16v16H0z" Fill="#FFFFFF" />
|
||||
<Path Data="M0 0h16v16H0z" Fill="#FFFFFF" />
|
||||
<Path Data="M15.429 13.429H.57L0 12.857V2.571L.571 2H15.43l.571.571v10.286l-.571.572ZM1.143 12.286h13.714V3.143H1.143v9.143Z" Fill="#212121" />
|
||||
<Path Data="M14.859 3.143H1.145v9.143h13.714V3.143Z" Fill="#FEF7B2" />
|
||||
<Path Data="M14.859 12.286H1.145V10l13.714-4.571v6.857Z" Fill="#FDE300" />
|
||||
<Path Data="M13.716 4.286v6.857H2.287V4.286h11.429Zm1.143-1.143H1.145v9.143h13.714V3.143Z" Fill="#FFFFFF" />
|
||||
<Path Data="M10.286 12.286H5.715v1.143h4.571v-1.143Z" Fill="#9E9FA0" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,5 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="16" Width="16">
|
||||
<Path Fill="#000000" Data="M8 0a7.6 7.6 0 012.1.3 6.4 6.4 0 011.9.8 10.4 10.4 0 011.7 1.2A10.4 10.4 0 0114.9 4a6.4 6.4 0 01.8 1.9 7.5 7.5 0 010 4.2 6.4 6.4 0 01-.8 1.9 10.4 10.4 0 01-1.2 1.7 10.4 10.4 0 01-1.7 1.2 6.4 6.4 0 01-1.9.8 7.5 7.5 0 01-4.2 0 6.4 6.4 0 01-1.9-.8 10.4 10.4 0 01-1.7-1.2A10.4 10.4 0 011.1 12a6.4 6.4 0 01-.8-1.9 7.5 7.5 0 010-4.2A6.4 6.4 0 011.1 4a10.4 10.4 0 011.2-1.7A10.4 10.4 0 014 1.1 6.4 6.4 0 015.9.3 7.6 7.6 0 018 0zM1 8a6.4 6.4 0 00.3 2h2.8A3.4 3.4 0 004 9V7a3.4 3.4 0 00.1-1H1.3A6.4 6.4 0 001 8zm4.7-6.6a3.4 3.4 0 00-1.2.6l-1.2.8-.9 1A7.5 7.5 0 001.7 5h2.6a2.9 2.9 0 01.2-.9l.3-1 .4-.9a5.6 5.6 0 01.5-.8zm-4 9.6a7.5 7.5 0 00.7 1.2l.9 1 1.2.8a3.4 3.4 0 001.2.6 5.6 5.6 0 01-.5-.8l-.4-.9-.3-1a2.9 2.9 0 01-.2-.9zm9.2-1a3.4 3.4 0 01.1-1V7a3.4 3.4 0 01-.1-1H5.1A3.4 3.4 0 015 7v2a3.4 3.4 0 01.1 1zM8 1l-.7.2-.6.6-.5.7a3.6 3.6 0 00-.4.9l-.3.9a2.5 2.5 0 00-.2.7h5.4a2.5 2.5 0 00-.2-.7l-.3-.9a3.6 3.6 0 00-.4-.9l-.5-.7-.6-.6zm0 14l.7-.2.6-.6.5-.7a3.6 3.6 0 00.4-.9l.3-.9a2.5 2.5 0 00.2-.7H5.3a2.5 2.5 0 00.2.7l.3.9a3.6 3.6 0 00.4.9l.5.7.6.6zm6.3-10a7.5 7.5 0 00-.7-1.2l-.9-1-1.2-.8-1.2-.6a5.6 5.6 0 01.5.8l.4.9.3 1a2.9 2.9 0 01.2.9zm-4 9.6a3.4 3.4 0 001.2-.6l1.2-.8.9-1a7.5 7.5 0 00.7-1.2h-2.6a2.9 2.9 0 01-.2.9l-.3 1-.4.9a5.6 5.6 0 01-.5.8zM15 8a6.4 6.4 0 00-.3-2h-2.8a3.4 3.4 0 00.1 1v2a3.4 3.4 0 00-.1 1h2.8a6.4 6.4 0 00.3-2z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,16 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="64" Width="64">
|
||||
<Ellipse Canvas.Left="1.75" Canvas.Top="1.75" Width="60.5" Height="60.5" StrokeThickness="1.5" Stroke="#707070" />
|
||||
<Canvas Height="64" Width="64">
|
||||
<Canvas.RenderTransform>
|
||||
<MatrixTransform Matrix=".9 0 0 .9 10.4 10.4" />
|
||||
</Canvas.RenderTransform>
|
||||
<Rectangle Canvas.Left="13.3" Canvas.Top="12.3" Width="21.4" Height="28.5" StrokeThickness="2.5" Stroke="#707070" RadiusX="0.6" RadiusY="0.6" />
|
||||
<Ellipse Canvas.Top="21.799999999999997" Canvas.Left="20.4" Width="7.2" Height="7.2" StrokeThickness="2.5" Stroke="#707070" />
|
||||
<Path Data="M18 35a1 1 0 1112 0" StrokeThickness="2.5" Stroke="#707070" />
|
||||
</Canvas>
|
||||
<Canvas>
|
||||
<Path Data="M36.68 14h2.34l-3.24 6.75h-2.43zM24.89 14h2.43l5.58 11.25a1.046 1.046 0 01-1.791 1.08l-.549-1.08z" Fill="#707070" />
|
||||
</Canvas>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,12 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="64" Width="64">
|
||||
<Ellipse Canvas.Left="1.75" Canvas.Top="1.75" Width="60.5" Height="60.5" StrokeThickness="1.5" Stroke="#707070" />
|
||||
<Canvas Height="64" Width="64">
|
||||
<Canvas.RenderTransform>
|
||||
<MatrixTransform Matrix="1.1 0 0 1.1 8.8 5.61" />
|
||||
</Canvas.RenderTransform>
|
||||
<Ellipse Canvas.Top="10.5" Canvas.Left="13" Width="14" Height="14" StrokeThickness="2.5" Stroke="#707070" />
|
||||
<Path Data="M30 35h10m-5-5v10M30.833 32.09A11 11 0 009 34" StrokeThickness="2.5" Stroke="#707070" />
|
||||
</Canvas>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,22 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Viewbox.Resources>
|
||||
<LinearGradientBrush x:Key="2234a2b0-8e35-4cb8-93a2-033d950b05a2" StartPoint="0.090379998087883,0.101590000092983" EndPoint="0.090379998087883,0.0783400014042854">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#5e9624" />
|
||||
<GradientStop Offset="0.241" Color="#6fb02a" />
|
||||
<GradientStop Offset="0.501" Color="#7cc52f" />
|
||||
<GradientStop Offset="0.756" Color="#83d232" />
|
||||
<GradientStop Offset="1" Color="#86d633" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Viewbox.Resources>
|
||||
<Canvas Height="18" Width="18">
|
||||
<Path Fill="{StaticResource 2234a2b0-8e35-4cb8-93a2-033d950b05a2}" Data="M13.9 8.989a1.158 1.158 0 11-1.159-1.155A1.157 1.157 0 0113.9 8.989zm-4.866-1.15a1.158 1.158 0 101.159 1.156 1.157 1.157 0 00-1.159-1.156zm-3.7 0A1.158 1.158 0 106.493 9a1.158 1.158 0 00-1.159-1.156z" />
|
||||
<Path Fill="#50e6ff" Data="M6.184 13.633l-.664.665a.3.3 0 01-.424 0L.184 9.402a.6.6 0 01-.001-.848l.664-.666 5.335 5.32a.3.3 0 010 .425z" />
|
||||
<Path Fill="#1490df" Data="M5.421 3.701l.67.667a.3.3 0 010 .425l-5.245 5.26-.666-.664a.6.6 0 010-.849L5 3.706a.3.3 0 01.425 0z" />
|
||||
<Path Fill="#50e6ff" Data="M17.154 7.885l.664.665a.6.6 0 01-.001.849l-4.912 4.897a.3.3 0 01-.424 0l-.664-.666a.3.3 0 010-.424l5.337-5.321z" />
|
||||
<Path Fill="#1490df" Data="M17.823 9.386l-.665.664-5.245-5.26a.3.3 0 010-.424l.67-.668a.3.3 0 01.424 0l4.82 4.834a.6.6 0 01-.002.849z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,8 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="20.9" Width="19.9">
|
||||
<Path Data="M8 17.1c-.2 0-.4.3-.4.8 0 1.5 1.2 2.6 2.7 2.6S13 19.4 13 18c0-.5-.1-.9-.4-.9H8z" Fill="#FCD116" />
|
||||
<Path Data="M17 16.1V6.7c0-3.4-3.4-6.2-7-6.2S3 3.3 3 6.7v9.4H1v2h18v-2h-2z" Fill="#FF8C00" />
|
||||
<Path Data="M14.6 2.3C13.4 1.2 11.6.5 9.7.5 6.1.5 3 3.3 3 6.7v7L14.6 2.3z" Opacity="0.2" Fill="#FFFFFF" />
|
||||
<Path Data="M1 16.1h18v2H1z" Fill="#1e1e1e" Opacity="0.2" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,24 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="de1cccc6-47f0-46c5-9f1a-e61eeb0d70ee" StartPoint="0.0966000035405159,0.152300000190735" EndPoint="0.0966000035405159,0.0500999987125397">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#0078d4" />
|
||||
<GradientStop Offset="0.82" Color="#5ea0ef" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Path Data="M4.37 3.58h7.97v9.68H4.37z" Fill="#FFFFFF" />
|
||||
<Path Fill="#0078d4" Data="M5.08 13h-.46V3.83h7.48v3.94h.5V3.58a.25.25 0 00-.25-.25h-8a.28.28 0 00-.25.25v9.69a.27.27 0 00.08.18.26.26 0 00.17.07h.71z" />
|
||||
<Path Data="M9.84 4.61H5.42a.35.35 0 00-.35.39v9.38a.35.35 0 00.35.34h7.68a.35.35 0 00.34-.35V8.12a.35.35 0 00-.35-.35h-2.54a.35.35 0 01-.35-.35V5a.34.34 0 00-.36-.39z" Fill="#FFFFFF" />
|
||||
<Path Fill="{StaticResource de1cccc6-47f0-46c5-9f1a-e61eeb0d70ee}" Data="M9.68 5.05V7.4a.86.86 0 00.87.86H13v6H5.55V5.05h4.13m.17-.52H5.37a.36.36 0 00-.37.35v9.52a.36.36 0 00.36.35h7.77a.35.35 0 00.36-.35V8.09a.34.34 0 00-.36-.34h-2.57a.35.35 0 01-.35-.35V4.88a.36.36 0 00-.36-.35z" />
|
||||
<Path Fill="#0078d4" Data="M13.36 7.81l-3.28-3.2v2.61a.59.59 0 00.59.6z" />
|
||||
<Path Fill="#4d4d4d" Data="M11.72 9.34h-5a.17.17 0 01-.18-.17.18.18 0 01.22-.17h5a.18.18 0 01.18.18.17.17 0 01-.22.16zm0 1h-5a.18.18 0 01-.18-.18.18.18 0 01.22-.16h5a.18.18 0 01.18.17.18.18 0 01-.22.17zm0 1.01h-5a.18.18 0 01-.18-.18.17.17 0 01.22-.17h5a.17.17 0 01.18.17.18.18 0 01-.22.18z" />
|
||||
<Path Fill="#949494" Data="M.5 15.39a.15.15 0 00.09.14l1.23.69 2.1 1.17a.17.17 0 00.23-.06l.71-1.18a.17.17 0 00-.06-.23l-2.46-1.37a.16.16 0 01-.08-.14V3.59a.16.16 0 01.08-.14L4.8 2.08a.17.17 0 00.06-.23L4.15.67a.17.17 0 00-.23-.06L1.86 1.76l-1.27.71a.15.15 0 00-.09.14v12.78z" />
|
||||
<Path Fill="#a3a3a3" Data="M2.25 3.51a.13.13 0 01.07-.06l2.45-1.37a.17.17 0 00.06-.23L4.13.67a.19.19 0 00-.24-.06l-2 1.15-1.33.71a.17.17 0 00-.06.06l1 .53zm2.52 12.41l-2.45-1.37a.2.2 0 01-.08-.08l-1.73 1h.05l1.24.69 2.09 1.17a.19.19 0 00.24-.06l.7-1.18a.17.17 0 00-.06-.17z" />
|
||||
<Path Fill="#949494" Data="M17.5 15.39a.15.15 0 01-.09.14l-1.23.69-2.1 1.17a.17.17 0 01-.23-.06l-.71-1.18a.17.17 0 01.06-.23l2.46-1.37a.16.16 0 00.08-.14V3.59a.16.16 0 00-.08-.14L13.2 2.08a.17.17 0 01-.06-.23l.71-1.18a.17.17 0 01.23-.06l2.06 1.15 1.27.71a.15.15 0 01.09.14v12.78z" />
|
||||
<Path Fill="#a3a3a3" Data="M15.75 3.51a.13.13 0 00-.07-.06l-2.45-1.37a.17.17 0 01-.06-.23l.7-1.18a.19.19 0 01.24-.06l2.05 1.15 1.28.71a.17.17 0 01.06.06l-1 .53zm-2.52 12.41l2.45-1.37a.2.2 0 00.08-.08l1.73 1-1.24.69-2.09 1.17a.19.19 0 01-.24-.06l-.7-1.18a.17.17 0 01.01-.17z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,5 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="16" Width="16">
|
||||
<Path Fill="#000000" Data="M12.5 1.4a10.7 10.7 0 011.9 1.8 7.8 7.8 0 011.2 2.2A7.5 7.5 0 0116 8a7.6 7.6 0 01-.3 2.1 6.4 6.4 0 01-.8 1.9 10.4 10.4 0 01-1.2 1.7 10.4 10.4 0 01-1.7 1.2 6.4 6.4 0 01-1.9.8 7.5 7.5 0 01-4.2 0 6.4 6.4 0 01-1.9-.8 10.4 10.4 0 01-1.7-1.2A10.4 10.4 0 011.1 12a6.4 6.4 0 01-.8-1.9 7.5 7.5 0 010-4.2 11.9 11.9 0 01.8-2 10.1 10.1 0 011.3-1.6A10.9 10.9 0 014.1 1H2V0h4v4H5V1.7a6.2 6.2 0 00-1.7 1.1 6.1 6.1 0 00-1.2 1.5A5.3 5.3 0 001.3 6 6.9 6.9 0 001 8a6.3 6.3 0 00.3 1.9 4.6 4.6 0 00.7 1.6 4.9 4.9 0 001.1 1.4A4.9 4.9 0 004.5 14l1.6.8L8 15l1.9-.2 1.6-.8a4.9 4.9 0 001.4-1.1 4.9 4.9 0 001.1-1.4 8 8 0 00.8-1.6A12.3 12.3 0 0015 8a6.2 6.2 0 00-.4-2.3 6.9 6.9 0 00-1-1.9 8.7 8.7 0 00-1.7-1.6 7.2 7.2 0 00-2-.9l.2-1a6.6 6.6 0 012.4 1.1z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,7 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#3898C6" Data="M9.375 3.125h37.5V50h-37.5z" />
|
||||
<Path Fill="#7B7B7B" Data="M3.125 6.25H12.5v3.125H3.125zm0 9.375H12.5v3.125H3.125zm0 9.375H12.5v3.125H3.125zm0 9.375H12.5V37.5H3.125zm0 9.375H12.5v3.125H3.125z" />
|
||||
<Path Data="M18.75 15.625H37.5V25H18.75z" Fill="#ffffff" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,30 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="de1cccc6-47f0-46c5-9f1a-e61eeb0d7154" StartPoint="0.0793000012636185,0.179499998688698" EndPoint="0.0793000012636185,0.0562000013887882">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#5e9624" />
|
||||
<GradientStop Offset="1" Color="#b4ec36" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="de1cccc6-47f0-46c5-9f1a-e61eeb0d7155" StartPoint="0.0794999971985817,0.0921000018715858" EndPoint="0.0794999971985817,0">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#5e9624" />
|
||||
<GradientStop Offset="1" Color="#b4ec36" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Path Fill="{StaticResource de1cccc6-47f0-46c5-9f1a-e61eeb0d7154}" Data="M14 16.85a1.3 1.3 0 001.32-1.31.81.81 0 000-.16c-.52-4.15-2.88-7.53-7.4-7.53S1 10.71.51 15.39a1.34 1.34 0 001.19 1.46H14z" />
|
||||
<Path Data="M8 8.83a4.16 4.16 0 01-2.26-.66L7.92 14l2.22-5.79A4.2 4.2 0 018 8.83z" Fill="#ffffff" />
|
||||
<Ellipse Canvas.Left="3.7800000000000002" Canvas.Top="0.5" Width="8.34" Height="8.34" Fill="{StaticResource de1cccc6-47f0-46c5-9f1a-e61eeb0d7155}" />
|
||||
<Path Fill="#32bedd" Data="M17.49 11.13v4.24l-3.64 2.13v-4.24l3.64-2.13z" />
|
||||
<Path Fill="#9cebff" Data="M17.49 11.13l-3.64 2.13-3.64-2.13L13.85 9l3.64 2.13z" />
|
||||
<Path Fill="#50e6ff" Data="M13.85 13.26v4.24l-3.64-2.13v-4.24l3.64 2.13z" />
|
||||
<Path Fill="#9cebff" Data="M10.21 15.37l3.64-2.11v4.24l-3.64-2.13z" />
|
||||
<Path Fill="#50e6ff" Data="M17.49 15.37l-3.64-2.11v4.24l3.64-2.13z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,7 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="17" Width="13">
|
||||
<Path Fill="#0f0f0f" Data="M2.7 7.3L1.4 6l5-5H10v2h1V0H6L0 6l2 2 .7-.7zM8 6l-6 6 5 5 6-6V6zm4 4.6l-5 5L3.4 12l5-5H12z" />
|
||||
<Path Fill="#0f0f0f" Data="M3.7 10.3L2.4 9l5-5H11v2h1V3H7L1 9l2 2 .7-.7z" />
|
||||
<Ellipse Fill="#0f0f0f" Canvas.Left="10" Canvas.Top="8" Width="1" Height="1" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,21 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Viewbox.Resources>
|
||||
<LinearGradientBrush x:Key="a24f9983-911f-4df7-920f-f964c8c10f82" StartPoint="0.0900000035762787,0.158340007066727" EndPoint="0.0900000035762787,0.0578799992799759">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#32bedd" />
|
||||
<GradientStop Offset="0.175" Color="#32caea" />
|
||||
<GradientStop Offset="0.41" Color="#32d2f2" />
|
||||
<GradientStop Offset="0.775" Color="#32d4f5" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Viewbox.Resources>
|
||||
<Canvas Height="18" Width="18">
|
||||
<Path Fill="{StaticResource a24f9983-911f-4df7-920f-f964c8c10f82}" Data="M.5 5.788h17v9.478a.568.568 0 01-.568.568H1.068a.568.568 0 01-.568-.568V5.788z" />
|
||||
<Path Fill="#0078d4" Data="M1.071 2.166h15.858a.568.568 0 01.568.568v3.054H.5V2.734a.568.568 0 01.571-.568z" />
|
||||
<Path Fill="#f2f2f2" Data="M2.825 7.979l.369-.37a.167.167 0 01.236-.001l2.732 2.724a.335.335 0 010 .474l-.368.37-2.968-2.96a.167.167 0 010-.237z" />
|
||||
<Path Fill="#e6e6e6" Data="M3.249 13.504l-.37-.37a.167.167 0 010-.236l2.916-2.925.37.368a.335.335 0 010 .474l-2.683 2.691a.167.167 0 01-.236 0z" />
|
||||
<Rectangle Width="4.771" Height="1.011" Canvas.Left="7.221" Canvas.Top="12.64" Fill="#f2f2f2" RadiusX=".291" RadiusY=".291" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,11 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Path Fill="#3898C6" Data="M0 13.316c0 .378.287.684.641.684H14.36c.353 0 .64-.306.64-.684V3H0v10.316z" />
|
||||
<Path Fill="#7B7B7B" Data="M14.359 0H.641C.287 0 0 .322 0 .72V3h15V.72c0-.398-.287-.72-.641-.72z" />
|
||||
<Path Fill="#FFFFFF" Opacity=".1" Data="M.644 0C.29 0 .002.307.002.687v12.626c0 .379.288.687.642.687H5l6.854-14H.644z" />
|
||||
<Path Fill="#FFFFFF" Data="M1 3h13v10H1zm8-2h1v1H9zm2 0h1v1h-1zm2 0h1v1h-1z" />
|
||||
<Path Fill="#3898C6" Data="M5 5h6.5v1H5zM2 7h2v2H2zm0 3h2v2H2zm0-6h2v2H2zm3 4h6v1H5zm0 3h6v1H5z" />
|
||||
<Path Fill="#57D432" Data="M14.806 7.372C12.402 7.129 12 6 12 6s-.541 1.429-4 1.429v4.942c0 .619.376 1.199.896 1.706C10.075 15.226 12 16 12 16s4-1.606 4-3.63V7.429c-.445 0-.841-.021-1.194-.057z" />
|
||||
<Path Fill="#B8D432" Data="M14.806 7.372C12.402 7.129 12 6 12 6s-.541 1.429-4 1.429v4.942c0 .619.376 1.199.896 1.706l5.91-6.705z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,26 @@
|
||||
<Viewbox Width="18" Height="18" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="18" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="deed83ab-7995-4b1b-9000-e569a21c2014" StartPoint="0.064690001308918,0.0795900002121925" EndPoint="0.064690001308918,0.187000006437302">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.225" Color="#50e6ff" />
|
||||
<GradientStop Offset="1" Color="#198ab3" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="deed83ab-7995-4b1b-9000-e569a21c2015" StartPoint="0.0619699992239475,0.0220100004225969" EndPoint="0.0698100030422211,0.119529999792576">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.225" Color="#50e6ff" />
|
||||
<GradientStop Offset="1" Color="#198ab3" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Path Data="M11.783 16.761a1.15 1.15 0 0 0 1.154-1.146 1.08 1.08 0 0 0-.008-.139c-.452-3.615-2.515-6.56-6.45-6.56-4 0-6.07 2.493-6.473 6.57a1.158 1.158 0 0 0 1.032 1.269 1.112 1.112 0 0 0 .116.006Z" Fill="{StaticResource deed83ab-7995-4b1b-9000-e569a21c2014}" />
|
||||
<Path Data="M6.541 9.773A3.6 3.6 0 0 1 4.577 9.2l1.944 5.08 1.931-5.051a3.608 3.608 0 0 1-1.911.544Z" Fill="#FFFFFF" />
|
||||
<Ellipse Canvas.Left="2.886" Canvas.Top="2.518" Width="7.256" Height="7.256" Fill="{StaticResource deed83ab-7995-4b1b-9000-e569a21c2015}" />
|
||||
<Path Data="M18 8.611V7.127l-.208-.078-1.592-.521-.416-1.015L16.6 3.8l-1.047-1.046-.208.1-1.483.754-1.015-.408-.647-1.8h-1.488l-.078.208-.52 1.592-1.009.414a3.61 3.61 0 0 1 .966 1.833 2.851 2.851 0 1 1 1.422 5.32 2.884 2.884 0 0 1-.641-.078 7.369 7.369 0 0 1 1.68 2.972l.341-1.039 1.015-.417 1.717.807 1.042-1.041-.1-.208-.754-1.484.407-1.018Z" Fill="#0078d4" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,12 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#3898C6" Data="M3.125 0h31.25l12.5 12.5V50H3.125z" />
|
||||
<Path Data="M31.25 15.625v-12.5h-25v43.75h37.5v-31.25z" Fill="#ffffff" />
|
||||
<Path Fill="#3898C6" Data="M9.375 9.375H25V12.5H9.375zm0 21.875h6.25v3.125h-6.25zm0-12.5H31.25v3.125H9.375zm0 6.25H31.25v3.125H9.375z" />
|
||||
<Path Fill="#3898C6" Data="M19.609 35.068l-.722-.776a.507.507 0 01.028-.722l2.101-1.928a.512.512 0 01.348-.137.51.51 0 01.381.163l5.77 6.134 9.922-12.611a.53.53 0 01.728-.086l2.265 1.739a.5.5 0 01.195.34.494.494 0 01-.105.375l-12.75 16.19-8.161-8.681z" />
|
||||
<Canvas>
|
||||
<Path Data="M31.75 15.125V.5h2.418l12.207 12.207v2.418z" Fill="#3898C6" />
|
||||
<Path Data="M33.961 1l11.914 11.914v1.711H32.25V1h1.711m.414-1H31.25v15.625h15.625V12.5L34.375 0z" Fill="#3898C6" />
|
||||
</Canvas>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,6 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Data="M23 40.4c-1.2 1.2-3.1 1.2-4.3 0L3.4 25.1c-1.2-1.2-1.2-3-.1-4.2L7 17c.6-.6 1.3-.9 2.2-.9.8 0 1.6.3 2.1.9l9.6 9.6L40.5 7.2c-.5-1.5-2-2.6-3.6-2.6h-33C1.7 4.6 0 6.4 0 8.5v33c0 2.1 1.7 3.9 3.9 3.9h33c2.1 0 3.9-1.7 3.9-3.9V22.9L23 40.4z" Fill="#59b4d9" />
|
||||
<Path Data="M20.9 30.7L9.2 19l-3.6 3.8 15.3 15.4L50 9.4l-3.6-3.9z" Fill="#b8d432" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,20 @@
|
||||
<!-- This file was generated by the AiToXaml tool.-->
|
||||
<!-- Tool Version: 14.0.22307.0 -->
|
||||
<Viewbox Width="16" Height="16" xmlns="https://github.com/avaloniaui">
|
||||
<Rectangle Width="16" Height="16">
|
||||
<Rectangle.Fill>
|
||||
<DrawingBrush>
|
||||
<DrawingBrush.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
|
||||
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M4,16C2.897,16,2,15.103,2,14L2,5 1,5 1,2 4,2C4,0.897,4.897,0,6,0L9,0C10.103,0,11,0.897,11,2L14,2 14,5 13,5 13,14C13,15.103,12.103,16,11,16z" />
|
||||
<GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,12L9,12 9,6 10,6z M8,12L7,12 7,6 8,6z M6,12L5,12 5,6 6,6z M4,14L11,14 11,4 4,4z" />
|
||||
<GeometryDrawing Brush="#FF424242" Geometry="F1M11,4L4,4 4,14 11,14z M6,3L9,3 9,2 6,2z M13,3L13,4 12,4 12,14C12,14.552,11.552,15,11,15L4,15C3.448,15,3,14.552,3,14L3,4 2,4 2,3 5,3 5,2C5,1.448,5.448,1,6,1L9,1C9.552,1,10,1.448,10,2L10,3z M10,6L9,6 9,12 10,12z M8,6L7,6 7,12 8,12z M6,12L5,12 5,6 6,6z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingBrush.Drawing>
|
||||
</DrawingBrush>
|
||||
</Rectangle.Fill>
|
||||
</Rectangle>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,5 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#2072B8" Data="M25 4.885v16.99h21.875V3.124zM3.125 6.647v15.228h18.75V5.137zM25 41.989v-16.99h21.875V43.75zM3.125 40.227V24.999h18.75v16.738z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,38 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui">
|
||||
<Canvas Width="18" Height="18">
|
||||
<Rectangle Canvas.Left="0" Canvas.Top="1.03" Width="16.68" Height="11.87" RadiusX="0.6" RadiusY="0.6" Fill="#FF0078D4"/>
|
||||
<Rectangle Canvas.Left="0.97" Canvas.Top="1.86" Width="14.74" Height="10.1" RadiusX="0.3" RadiusY="0.3" Opacity="0.9">
|
||||
<Rectangle.Fill>
|
||||
<LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">
|
||||
<GradientStop Offset="0" Color="#FFD2EBFF"/>
|
||||
<GradientStop Offset="1" Color="#FFF0FFFD"/>
|
||||
</LinearGradientBrush>
|
||||
</Rectangle.Fill>
|
||||
</Rectangle>
|
||||
<Rectangle Canvas.Left="10.3" Canvas.Top="4.12" Width="7.7" Height="12.85" RadiusX="0.3" RadiusY="0.3">
|
||||
<Rectangle.Fill>
|
||||
<LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">
|
||||
<GradientStop Offset="0" Color="#FF0078D4"/>
|
||||
<GradientStop Offset="0.17" Color="#FF1C84DC"/>
|
||||
<GradientStop Offset="0.38" Color="#FF3990E4"/>
|
||||
<GradientStop Offset="0.59" Color="#FF4D99EA"/>
|
||||
<GradientStop Offset="0.8" Color="#FF5A9EEE"/>
|
||||
<GradientStop Offset="1" Color="#FF5EA0EF"/>
|
||||
</LinearGradientBrush>
|
||||
</Rectangle.Fill>
|
||||
</Rectangle>
|
||||
<Rectangle Canvas.Left="13.27" Canvas.Top="4.55" Width="1.77" Height="0.24" RadiusX="0.11" RadiusY="0.11" Fill="#FFF2F2F2"/>
|
||||
<Rectangle Canvas.Left="11.03" Canvas.Top="5.2" Width="6.25" Height="10.33" RadiusX="0.14" RadiusY="0.14" Opacity="0.9">
|
||||
<Rectangle.Fill>
|
||||
<LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">
|
||||
<GradientStop Offset="0" Color="#FFD2EBFF"/>
|
||||
<GradientStop Offset="1" Color="#FFF0FFFD"/>
|
||||
</LinearGradientBrush>
|
||||
</Rectangle.Fill>
|
||||
</Rectangle>
|
||||
<Rectangle Canvas.Left="7.48" Canvas.Top="1.4" Width="1.77" Height="0.24" RadiusX="0.11" RadiusY="0.11" Fill="#FFF2F2F2"/>
|
||||
<Ellipse Canvas.Left="3.04" Canvas.Top="7.75" Width="8.42" Height="8.42" Fill="#FF76BC2D"/>
|
||||
<Path Fill="#FFFFFFFF" Data="M9.78,11.41 H7.78 V9.41 A0.47,0.47 0 0 0 7.33,9 H7.17 A0.47,0.47 0 0 0 6.7,9.47 V11.47 H4.7 A0.47,0.47 0 0 0 4.24,11.94 V12 A0.47,0.47 0 0 0 4.7,12.47 H6.7 V14.47 A0.47,0.47 0 0 0 7.17,14.93 H7.33 A0.47,0.47 0 0 0 7.8,14.47 V12.47 H9.78 A0.47,0.47 0 0 0 10.25,12 V11.84 A0.47,0.47 0 0 0 9.78,11.41 Z"/>
|
||||
<Rectangle Canvas.Left="13.72" Canvas.Top="15.96" Width="0.86" Height="0.73" RadiusX="0.2" RadiusY="0.2" Fill="#FFF2F2F2"/>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,49 @@
|
||||
# One-shot icon converter — translates the WPF icon shape XAML under
|
||||
# UI/WPF/XAML/Icons/*.xaml into Avalonia 11 .axaml files in this folder.
|
||||
#
|
||||
# Two transforms are needed (both verified against the WPF originals):
|
||||
# 1. WPF presentation namespace → Avalonia namespace.
|
||||
# 2. LinearGradientBrush.MappingMode:
|
||||
# "RelativeToBoundingBox" → drop the attribute (Avalonia's default
|
||||
# matches; StartPoint/EndPoint stay 0..1).
|
||||
# "Absolute" → drop the attribute + suffix
|
||||
# StartPoint/EndPoint with ",Absolute" so
|
||||
# Avalonia's RelativePoint parser reads
|
||||
# them as absolute device-independent units.
|
||||
#
|
||||
# All other shape primitives (Canvas, Path Data, Rectangle RadiusX/Y,
|
||||
# Canvas.Top / Canvas.Left attached props, GradientStop Offset/Color,
|
||||
# StaticResource keys) carry over unchanged.
|
||||
#
|
||||
# Run from anywhere; emits sibling .axaml files into this Icons folder.
|
||||
|
||||
$wpfRoot = Join-Path $PSScriptRoot '..\..\..\UI\XAML/Icons'
|
||||
$wpfRoot = (Resolve-Path $wpfRoot).Path
|
||||
$dstRoot = $PSScriptRoot
|
||||
|
||||
$converted = 0
|
||||
foreach ($file in (Get-ChildItem -Path $wpfRoot -Filter '*.xaml')) {
|
||||
$xaml = [IO.File]::ReadAllText($file.FullName)
|
||||
|
||||
$xaml = $xaml.Replace(
|
||||
'http://schemas.microsoft.com/winfx/2006/xaml/presentation',
|
||||
'https://github.com/avaloniaui')
|
||||
|
||||
$xaml = $xaml -replace '\s+MappingMode="RelativeToBoundingBox"', ''
|
||||
|
||||
if ($xaml -match 'MappingMode="Absolute"') {
|
||||
$xaml = [regex]::Replace($xaml, '<LinearGradientBrush\b[^>]*MappingMode="Absolute"[^>]*>', {
|
||||
param($m)
|
||||
$tag = $m.Value
|
||||
$tag = $tag -replace '\s+MappingMode="Absolute"', ''
|
||||
$tag = [regex]::Replace($tag, 'StartPoint="([^"]+)"', { param($mm) 'StartPoint="' + $mm.Groups[1].Value + ',Absolute"' })
|
||||
$tag = [regex]::Replace($tag, 'EndPoint="([^"]+)"', { param($mm) 'EndPoint="' + $mm.Groups[1].Value + ',Absolute"' })
|
||||
return $tag
|
||||
})
|
||||
}
|
||||
|
||||
$dst = Join-Path $dstRoot ($file.BaseName + '.axaml')
|
||||
[IO.File]::WriteAllText($dst, $xaml, [Text.UTF8Encoding]::new($false))
|
||||
$converted++
|
||||
}
|
||||
Write-Host "Converted $converted icons → $dstRoot"
|
||||
@@ -0,0 +1,11 @@
|
||||
<Viewbox xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Fill="#1D1D1D" Data="M28.125 46.875h-25A3.125 3.125 0 010 43.75V3.125A3.125 3.125 0 013.125 0h25a3.125 3.125 0 013.125 3.125V43.75a3.125 3.125 0 01-3.125 3.125z" />
|
||||
<Path Fill="#5AB3D9" Data="M3.125 3.125h25v37.5h-25z" />
|
||||
<Path Fill="#3898C6" Data="M28.125 40.625h-25V32.67l25-18.465z" />
|
||||
<Path Data="M25 6.25V37.5H6.25V6.25H25m3.125-3.125h-25v37.5h25v-37.5z" Opacity=".4" Fill="#FFFFFF" />
|
||||
<Path Fill="#E4E4E4" Data="M12.5 40.625h6.25v3.125H12.5z" />
|
||||
<Path Fill="#7FBA42" Data="M37.5 15.625h6.25V50H37.5z" />
|
||||
<Path Fill="#7FBA42" Data="M40.625 6.25l-9.375 12.5H50z" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,41 @@
|
||||
<Viewbox Width="18" Height="18" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="20" Width="18">
|
||||
<Canvas.Resources>
|
||||
<LinearGradientBrush x:Key="d6e6b28a-2cd1-4618-9838-bdcda5e39040" StartPoint="0.0900000035762787,0.126819998025894" EndPoint="0.0900000035762787,0.681999981403351">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.145" Color="#d2ebff" />
|
||||
<GradientStop Offset="0.503" Color="#dbf1fe" />
|
||||
<GradientStop Offset="0.997" Color="#f0fffd" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="d6e6b28a-2cd1-4618-9838-bdcda5e39041" StartPoint="0.0900000035762787,0.173179998993874" EndPoint="0.0900000035762787,0.126819998025894">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.157" Color="#0078d4" />
|
||||
<GradientStop Offset="0.356" Color="#0072ca" />
|
||||
<GradientStop Offset="0.689" Color="#0064b0" />
|
||||
<GradientStop Offset="0.851" Color="#005ba1" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
<LinearGradientBrush x:Key="d6e6b28a-2cd1-4618-9838-bdcda5e39042" StartPoint="0.0900000035762787,0.126819998025894" EndPoint="0.0900000035762787,0.098800003528595">
|
||||
<LinearGradientBrush.GradientStops>
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0" Color="#0078d4" />
|
||||
<GradientStop Offset="0.127" Color="#107fd8" />
|
||||
<GradientStop Offset="0.516" Color="#3a91e5" />
|
||||
<GradientStop Offset="0.82" Color="#549cec" />
|
||||
<GradientStop Offset="1" Color="#5ea0ef" />
|
||||
</GradientStops>
|
||||
</LinearGradientBrush.GradientStops>
|
||||
</LinearGradientBrush>
|
||||
</Canvas.Resources>
|
||||
<Rectangle Canvas.Top="0.682" Width="1.202" Height="12" Fill="{StaticResource d6e6b28a-2cd1-4618-9838-bdcda5e39040}" />
|
||||
<Path Data="M17.194 1.489v10.387H.806V1.489h16.388M17.4.682H.6a.6.6 0 0 0-.6.6v10.8a.6.6 0 0 0 .6.6h16.8a.6.6 0 0 0 .6-.6V1.283a.6.6 0 0 0-.6-.6Z" Fill="#0078d4" />
|
||||
<Path Data="M12.607 16.312c-1.78-.278-1.85-1.562-1.844-3.63H7.232c0 2.068-.065 3.352-1.844 3.63a1.048 1.048 0 0 0-.888 1.006h9a1.053 1.053 0 0 0-.893-1.006Z" Fill="{StaticResource d6e6b28a-2cd1-4618-9838-bdcda5e39041}" />
|
||||
<Path Data="M0 9.88h18v2.446a.356.356 0 0 1-.356.356H.607A.607.607 0 0 1 0 12.075V9.88Z" Fill="{StaticResource d6e6b28a-2cd1-4618-9838-bdcda5e39042}" />
|
||||
<Ellipse Canvas.Left="8.253" Canvas.Top="10.534" Width="1.494" Height="1.494" Fill="#c3f1ff" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Viewbox Width="18" Height="18" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Canvas Height="50" Width="50">
|
||||
<Path Data="M34 45H16c-1 0-1 0-1 1.22 0 .779 1.58.736 6.111.778h7.778c4.538-.041 6.111-.02 6.111-.778C35 45 35 45 34 45z" Fill="#3e3e3e" />
|
||||
<Path Data="M20 32.064h10c0 5.574.207 9.042 1.111 10.6 1.258 2.168 3.889 2 3.889 2.556 0 .758-1.573.737-6.111.778-.361.003-7.417.003-7.778 0-4.531-.042-6.111.001-6.111-.778 0-.556 2.626-.347 3.889-2.556.895-1.565 1.111-5.069 1.111-10.6z" Fill="#777777" />
|
||||
<Path Data="M19.936 36.222A44.75 44.75 0 0 1 19.763 39h10.47a44.728 44.728 0 0 1-.17-2.778H19.936z" />
|
||||
<Path Data="M2.326 5.651h45.349C48.837 5.651 49 6.814 49 7.977v26.744c0 1.163-1.163 2.326-2.326 2.326H3.326C2.163 37.046 1 35.884 1 34.721V7.977c0-1.163.163-2.326 1.326-2.326z" Fill="#777777" />
|
||||
<Path Data="M3.326 2h43.349A2.333 2.333 0 0 1 49 4.326V32H1V4.326A2.333 2.333 0 0 1 3.326 2z" Fill="#3e3e3e" />
|
||||
<Path Data="M4 5h42v24H4V5z" Fill="#59d4b9" />
|
||||
<Path Data="M37.158 2H3.326A2.333 2.333 0 0 0 1 4.326V32h12.294L37.158 2z" Fill="#ffffff" />
|
||||
<Path Data="M49 19 41 8.333 30 23h7v14.046h8V23h4z" Fill="#ffffff" />
|
||||
<Path Data="M38 19h6v30h-6z" Fill="#7fba00" />
|
||||
<Path Data="m41 10-9 12h18z" Fill="#7fba00" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
@@ -0,0 +1,155 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/ImportForm.xaml. Hosted via Show-ModalForm
|
||||
rather than as a standalone Window — Get files / Import / Cancel
|
||||
live in this Grid and call back into Show-IntuneManagerImportForm.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Window -> Grid (modal-form host owns the chrome).
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup dropped — TitleColumn
|
||||
uses ColumnDefinition Width="Auto".
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- {Binding ImportFolder, Mode=TwoWay} et al replaced by
|
||||
imperative property assignment in Show-IntuneManagerImportForm
|
||||
— IntuneManagerImportSettings has no INotifyPropertyChanged,
|
||||
so two-way bindings would render but never round-trip. Same
|
||||
convention as ExportForm.axaml.
|
||||
- cbImportType DisplayMemberPath / SelectedValuePath dropped;
|
||||
the PS code projects $script:IntuneManagerImportOptions
|
||||
(NameValueObject) into [SettingsListItem] CLR rows
|
||||
(avalonia-binding-needs-clr-types) and reads SelectedItem.Value.
|
||||
- DataGrid Columns are declared inline against
|
||||
[IntuneImportRowItem] properties — the WPF impl built them in
|
||||
code (Get-GridCheckboxColumn + DataGridTextColumns). Header
|
||||
checkbox toggle-all is wired imperatively against Selected.
|
||||
- DataGrid Background DynamicResource binding dropped — Avalonia
|
||||
theme keys differ; default works.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid Name="grdImportProperties">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Folder where exported files are located. Either a folder for a single policy type or the parent folder for all exported policies. Parent folder is recommended — it then includes all policy types for the current group.">
|
||||
<Label Content="Import folder"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<Grid Grid.Row="0" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Name="txtImportFolder" Grid.Column="0"/>
|
||||
<Button Name="browseImportFolder" Grid.Column="2" Content="..."
|
||||
Padding="5,0,5,0" Width="50"
|
||||
ToolTip.Tip="Browse for folder"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Information about the exported environment (Groups, ScopeTags etc.). Only used when importing objects from a different tenant.">
|
||||
<Label Content="Migration Table"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBlock Name="lblMigrationTableInfo" Grid.Row="1" Grid.Column="1"
|
||||
Margin="0,9,5,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Imports ScopeTags. The ScopeTags must exist in the target environment before they can be assigned during import.">
|
||||
<Label Content="Assign Scope (Tags)"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkImportScopes" Grid.Row="2" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Import object assignments. Note: This will create groups that don't exist in the target environment.">
|
||||
<Label Content="Import Assignments"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkImportAssignments" Grid.Row="3" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Replaces IDs of dependency objects (e.g. App Config references Applications). Increases import time but ensures objects are imported correctly. Referenced objects must exist.">
|
||||
<Label Content="Replace Dependency IDs"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Name="chkReplaceDependencyIDs" Grid.Row="4" Grid.Column="1"
|
||||
Margin="0,5,0,0" VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify how files are imported. Always import (default) — always create. Skip if object exists — skip if there is an existing object with the same name and type. Replace — delete the existing match and copy its assignments to the imported object. Replace with assignments — delete the existing match, assignments come from the import file. Update — replace settings on the existing match.">
|
||||
<Label Content="Import Type"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Name="cbImportType" DisplayMemberBinding="{Binding Name}" Grid.Row="5" Grid.Column="1" Margin="0,5,5,0"
|
||||
MinWidth="250" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Files that can be imported. These must match the object type being imported.">
|
||||
<Label Content="Import files"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="1" Grid.Column="1" Name="dgObjectsToImport"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
Margin="0,0,0,5">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="Auto" CanUserSort="False">
|
||||
<DataGridTemplateColumn.Header>
|
||||
<CheckBox IsChecked="True"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Select/deselect all listed items"/>
|
||||
</DataGridTemplateColumn.Header>
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Header="Object Name" Binding="{Binding ObjectName}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Policy Type" Binding="{Binding PolicyType}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Policy Base" Binding="{Binding PolicyBase}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Platform" Binding="{Binding Platform}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="File Name" Binding="{Binding FileName}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Action" Binding="{Binding ImportAction}" IsReadOnly="True" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Match" Binding="{Binding ImportMatch}" IsReadOnly="True" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Name="spImportSubMenu" Grid.Row="2" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,5,0,5">
|
||||
<Button Name="btnGetFiles" Content="Get files" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnImportSelected" Content="Import" Width="100" Margin="5,0,0,0"/>
|
||||
<Button Name="btnCancel" Content="Cancel" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,26 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title=""
|
||||
SizeToContent="WidthAndHeight"
|
||||
CanResize="False"
|
||||
ShowInTaskbar="False"
|
||||
WindowStartupLocation="CenterOwner">
|
||||
|
||||
<Grid Margin="10"
|
||||
ColumnDefinitions="Auto,*"
|
||||
RowDefinitions="Auto,Auto,Auto">
|
||||
|
||||
<Label Name="txtLabel" Grid.Column="1" />
|
||||
<TextBox Name="txtValue" Grid.Column="1" Grid.Row="1" MinWidth="250" />
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.ColumnSpan="2"
|
||||
Orientation="Horizontal"
|
||||
HorizontalAlignment="Right"
|
||||
Margin="0,15,0,0"
|
||||
Spacing="10">
|
||||
<Button IsDefault="True" Name="btnOk" MinWidth="60" Content="_OK" />
|
||||
<Button IsCancel="True" Name="btnCancel" MinWidth="60" Content="_Cancel" />
|
||||
</StackPanel>
|
||||
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,110 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneManagerPanel.xaml.
|
||||
|
||||
Layout: title strip on row 0 (icon + form title + paging buttons +
|
||||
filter box + refresh hook), DataGrid in the middle, action buttons
|
||||
+ count label at the bottom. The grdNotLoggedIn overlay sits on the
|
||||
same Grid and is flipped via IsVisible by the auth event handlers.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Visibility="Collapsed" -> IsVisible="False"
|
||||
- ToolTip="..." -> ToolTip.Tip="..."
|
||||
- {Binding Text, ElementName=txtFilter} placeholder pattern is
|
||||
replaced with TextBox.Watermark (built-in in Avalonia).
|
||||
- DataGrid TextBlock NoWrap default lives in Themes/Styles.axaml
|
||||
— DataGrid.Resources can't house a Style without a key in
|
||||
Avalonia, so it's globalised to keep this file focused on layout.
|
||||
-->
|
||||
|
||||
<Grid Name="grdData">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Title strip (always visible — empty colored bar is intended idle state). -->
|
||||
<Grid Name="grdTitle" MinHeight="30">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Border Background="{DynamicResource TitleBackgroundColor}" Margin="0,0,0,5">
|
||||
<ContentControl Name="ccIcon" Width="24" Height="24" Margin="5,0,0,0"/>
|
||||
</Border>
|
||||
<TextBlock Name="txtFormTitle" Grid.Column="1" Grid.ColumnSpan="5"
|
||||
FontWeight="Bold" Padding="5" Margin="0,0,0,5"
|
||||
Background="{DynamicResource TitleBackgroundColor}"/>
|
||||
<Button Name="btnLoadAllPages" Grid.Column="2" Content="Load All"
|
||||
Width="100" Margin="0,5,5,7" IsVisible="False"/>
|
||||
<Button Name="btnLoadNextPage" Grid.Column="3" Content="Load More"
|
||||
Width="100" Margin="0,5,5,7" IsVisible="False"/>
|
||||
<TextBox Name="txtFilter" Grid.Column="4"
|
||||
MinWidth="200" MaxHeight="20"
|
||||
Margin="0,0,5,3" Watermark="Filter"/>
|
||||
<Button Name="btnRefresh" Grid.Column="5"
|
||||
Width="28" Height="22" Padding="0"
|
||||
Margin="0,0,5,5" Content="↻"
|
||||
FontSize="14"
|
||||
HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
|
||||
ToolTip.Tip="Refresh"/>
|
||||
</Grid>
|
||||
|
||||
<!-- Object DataGrid. Columns are added dynamically by Show-SelectedGraphPolicies. -->
|
||||
<DataGrid CanUserResizeColumns="True" Name="dgIntuneManagerObjects" Grid.Row="1"
|
||||
SelectionMode="Single"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
Margin="5,4,5,4"/>
|
||||
|
||||
<!-- Detail panel: Show-IntuneManagerDetailedView mounts content here. -->
|
||||
<Grid Name="grdObject" Grid.Row="1" Grid.RowSpan="2" IsVisible="False"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
Background="{DynamicResource ControlBackgroundColor}"/>
|
||||
|
||||
<!-- Bottom: count label + action buttons. -->
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Name="txtObjectsCount" FontWeight="SemiBold"
|
||||
VerticalAlignment="Center" Margin="5,5,0,5"
|
||||
ToolTip.Tip="Loaded objects (filtered shown / loaded total). A trailing '+' means more pages are available on the server — click Load More / Load All to fetch them."/>
|
||||
|
||||
<StackPanel Grid.Column="1" Name="spSubMenu" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,5,0,0">
|
||||
<Button Name="btnDocument" Content="Document" MinWidth="100" Margin="0,0,5,0" IsEnabled="False" ToolTip.Tip="Generate documentation for the selected item(s) — or all listed items when none are selected"/>
|
||||
<Button Name="btnView" Content="View" MinWidth="100" Margin="0,0,5,0" IsEnabled="False" ToolTip.Tip="View the json data of an item"/>
|
||||
<Button Name="btnCompare" Content="Compare" MinWidth="100" Margin="0,0,5,0" IsEnabled="False" ToolTip.Tip="Compare selected object with an exported file"/>
|
||||
<Button Name="btnCopy" Content="Copy" MinWidth="100" Margin="0,0,5,0" IsEnabled="False" ToolTip.Tip="Clone the selected item"/>
|
||||
<Button Name="btnDelete" Content="Delete" MinWidth="100" Margin="0,0,5,0" IsEnabled="False" ToolTip.Tip="Delete selected item(s)"/>
|
||||
<Button Name="btnImport" Content="Import" MinWidth="100" Margin="0,0,5,0" IsEnabled="False" ToolTip.Tip="Import items"/>
|
||||
<Button Name="btnExport" Content="Export" MinWidth="100" IsEnabled="False" ToolTip.Tip="Export selected or all items"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<!-- Signed-out overlay. Auth event handlers flip IsVisible. -->
|
||||
<Grid Name="grdNotLoggedIn" IsVisible="False">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Name="txtNotLoggedIn" Content="Not logged in. Please login to view objects"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,28 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneTools.xaml. Same structure: outer Grid
|
||||
with two stacked single-cell child Grids (grdToolsMain holds the active
|
||||
tool body; grdToolsInfo is reserved for popover-style info content,
|
||||
currently unused). Visibility="Collapsed" -> IsVisible="False".
|
||||
-->
|
||||
|
||||
<Grid x:Name="grdToolsMain">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
</Grid>
|
||||
|
||||
<Grid x:Name="grdToolsInfo" IsVisible="False">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,139 @@
|
||||
<TabControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Name="tcADMXPolicyConfig" Margin="5,5,0,0">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneToolsADMX.xaml. Translation notes:
|
||||
- xmlns swapped to https://github.com/avaloniaui.
|
||||
- InfoIcon rectangles dropped — labels are unambiguous; tooltip on the
|
||||
adjacent control covers the same info.
|
||||
- ToolTip="..." -> ToolTip.Tip="..." (Avalonia attached-property syntax).
|
||||
- Visibility="Collapsed" -> IsVisible="False".
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup dropped — no Avalonia
|
||||
equivalent. Auto-width title column is enough; both labels are short.
|
||||
- DataGrid.ContextMenu placed via the ContextMenu attached property
|
||||
(Avalonia DataGrid has no nested ContextMenu attached element).
|
||||
- DataGridTextColumn Width="10*" -> Width="*"; only one column flexes
|
||||
in the Avalonia grid so star-weighting is moot here.
|
||||
-->
|
||||
|
||||
<TabItem Header="Policy">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*" MinWidth="100"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="1*" MinWidth="100"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TreeView x:Name="tvADMXCategories"/>
|
||||
|
||||
<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch"/>
|
||||
|
||||
<Grid Grid.Column="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBox x:Name="txtADMXFilterSettings" Margin="0,0,0,5" IsVisible="False"/>
|
||||
|
||||
<DataGrid Grid.Row="1" x:Name="dgADMXCategoryPolicies"
|
||||
SelectionMode="Single"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserResizeColumns="True"
|
||||
CanUserSortColumns="True"
|
||||
AutoGenerateColumns="False"
|
||||
IsReadOnly="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Setting" Binding="{Binding Name}" Width="*" IsVisible="True"/>
|
||||
<DataGridTextColumn Header="State" Binding="{Binding SettingStatusText}" Width="Auto" IsVisible="True"/>
|
||||
<DataGridTextColumn Header="Path" Binding="{Binding Category}" Width="Auto" IsVisible="False"/>
|
||||
</DataGrid.Columns>
|
||||
<DataGrid.ContextMenu>
|
||||
<ContextMenu x:Name="mnuADMXSettingsContextMenu">
|
||||
<MenuItem Header="Edit" x:Name="mnuADMXSettingEdit"/>
|
||||
</ContextMenu>
|
||||
</DataGrid.ContextMenu>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0">
|
||||
<Button x:Name="btnADMXLoadADMX" Content="Load ADMX" MinWidth="100" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Load ADMX file"/>
|
||||
<Button x:Name="btnADMXLoadADML" Content="Load ADML" MinWidth="100" IsEnabled="False"
|
||||
ToolTip.Tip="Load ADML file if not found automatically"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="Import">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Grid.Row="0" Content="Custom Profile Name" Margin="0,5,5,0" VerticalAlignment="Center"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" x:Name="txtADMXProfileName" Margin="0,5,5,5"
|
||||
ToolTip.Tip="Specify the name of the custom profile"/>
|
||||
|
||||
<Label Grid.Row="1" Content="Custom Profile Description" Margin="0,5,5,0" VerticalAlignment="Center"/>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtADMXProfileDescription" Margin="0,5,5,5"
|
||||
ToolTip.Tip="Description for the custom profile"/>
|
||||
|
||||
<Label Grid.Row="2" Content="ADMX Policy File Name" Margin="0,5,5,0" VerticalAlignment="Center"/>
|
||||
<Grid Grid.Row="2" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Grid.Column="0" x:Name="txtADMXPolicyFileName" Margin="0,5,5,5"
|
||||
ToolTip.Tip="A unique name/id for the policy. The ADMX file will be stored in: %ProgramData%\Microsoft\PolicyManager\ADMXIngestion\Guid\AppName\Policy"/>
|
||||
<Button Grid.Column="1" x:Name="btnADMXPolicyNameRandom" Content="Add Random" MinWidth="100"
|
||||
Margin="0,5,5,5"
|
||||
ToolTip.Tip="Only required if multiple policies use different versions of the ADMX file. Also consider changing the AppName"/>
|
||||
</Grid>
|
||||
|
||||
<Label Grid.Row="3" Content="ADMX App Id" Margin="0,5,5,0" VerticalAlignment="Center"/>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" x:Name="txtADMXPolicyAppName" Margin="0,5,5,5"
|
||||
ToolTip.Tip="App ID for the ADMX. Add v2 or vVersion if multiple policies use different versions of the ADMX file"/>
|
||||
|
||||
<Label Grid.Row="4" Content="Ingest ADMX file" Margin="0,5,5,0" VerticalAlignment="Center"/>
|
||||
<CheckBox Grid.Row="4" Grid.Column="1" x:Name="chkADMXPolicyIngest" IsChecked="True"
|
||||
Margin="0,5,5,5"
|
||||
ToolTip.Tip="Ingest the ADMX file into the custom profile"/>
|
||||
|
||||
<Label Grid.Row="5" Content="OMA-URI Name for the ADMX ingestion" Margin="0,5,5,0" VerticalAlignment="Center"/>
|
||||
<TextBox Grid.Row="5" Grid.Column="1" x:Name="txtADMXPolicyIngestName" Margin="0,5,5,5"
|
||||
ToolTip.Tip="Name of the OMA-URI policy for the ADMX ingestion in the Custom Profile"/>
|
||||
|
||||
<StackPanel Grid.Row="7" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="Right"
|
||||
Margin="0,5,0,0">
|
||||
<Button x:Name="btnADMXImport" Content="Import" MinWidth="100"
|
||||
ToolTip.Tip="Create ADMX profile in Intune"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
@@ -0,0 +1,221 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneToolsADMXAddRegPolicy.xaml.
|
||||
Translation notes:
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup="TitleColumn" dropped — no
|
||||
Avalonia equivalent. Auto-width title columns matched at runtime.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- WPF Visibility="Collapsed" -> IsVisible="False" on the data-type-
|
||||
conditional rows (separator / value-prefix / expandable / additive).
|
||||
- The three ComboBoxes (Hive / PolicyStatus / DataType) drop
|
||||
DisplayMemberPath / SelectedValuePath / SelectedValue bindings —
|
||||
Show-ADMXRegSettingsDialog assigns ItemsSource ([SettingsListItem]
|
||||
rows) and ItemTemplate (LoadXaml) and seeds SelectedItem against the
|
||||
DataContext via a Where-Object match.
|
||||
- Bindings to RegPolicy.* / PolicyElement.* still resolve because the
|
||||
underlying ADMXRegPolicy / ADMXRegPolicyElement types are CLR
|
||||
(Add-NativeClass) — see [[avalonia-binding-needs-clr-types]].
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid x:Name="grdADMXRegPolicy">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Content="Policy name" Margin="0,0,5,0" VerticalAlignment="Center"
|
||||
ToolTip.Tip="This is the name/id of the policy in the ADMX file. A guid will be used if not specified"/>
|
||||
<TextBox Grid.Column="1" x:Name="txtADMXRegPolicyName" Text="{Binding PolicyName}" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Enabled will add the registry keys and disable will remove them">
|
||||
<Label Content="Policy status"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" x:Name="cbADMXRegPolicyStatus" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="HKLM for machine settings and HKCU for user settings">
|
||||
<Label Content="Registry hive"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" x:Name="cbADMXRegHive" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Path to the registry value">
|
||||
<Label Content="Reg key"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" x:Name="txtADMXRegKey" Text="{Binding Key}" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Name of the registry value to set if the policy is enabled/disabled">
|
||||
<Label Content="Policy value"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="5" Grid.Column="1" x:Name="txtADMXRegPolicyValueName"
|
||||
Text="{Binding StatusValueName}" Margin="0,5,0,0"/>
|
||||
</Grid>
|
||||
|
||||
<Separator Grid.Row="1" Margin="0,5,0,5"/>
|
||||
|
||||
<Grid Grid.Row="2" x:Name="grdADMXRegPolicyElement">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="250"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock TextWrapping="Wrap" Grid.ColumnSpan="2"
|
||||
Text="Add registry values that should be created/removed in the specified registry key"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="HKLM for machine settings and HKCU for user settings">
|
||||
<Label Content="Data type"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" x:Name="cbADMXRegElementDataType" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Optional. Only required if the reg value is located in a different key than specified for the policy">
|
||||
<Label Content="Key"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" x:Name="txtADMXRegElementKey"
|
||||
Text="{Binding Key}" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Name of the registry value to add">
|
||||
<Label Content="Value name"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" x:Name="txtADMXRegElementValueName"
|
||||
Text="{Binding ValueName}" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="4" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Value to set">
|
||||
<Label Content="Value"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="4" Grid.Column="1" x:Name="txtADMXRegElementValue"
|
||||
Text="{Binding Value}" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="1" Orientation="Horizontal" Margin="0,5,0,0">
|
||||
<Button x:Name="btnADMXRegElementAdd" Content="Add" MinWidth="100"/>
|
||||
<Button x:Name="btnADMXRegElementNew" Content="Update" MinWidth="100" IsVisible="False"/>
|
||||
</StackPanel>
|
||||
|
||||
<Rectangle Grid.Column="2" VerticalAlignment="Stretch" Fill="Black" Width="1" Margin="5,0,5,0" Grid.RowSpan="99"/>
|
||||
|
||||
<Grid Grid.Column="3" Grid.RowSpan="99">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock TextWrapping="Wrap" Grid.ColumnSpan="2" Text="Additional value settings"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Attribute: sotf - Do not overwrite existing value">
|
||||
<Label Content="Do not overwrite"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="1" Grid.Column="1" x:Name="chkADMXRegAttributeSoft"
|
||||
IsChecked="{Binding AttributeSoft}" Margin="0,5,0,0"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Attribute: expandable - Create(REG_EXPAND_SZ) instead of a string type (REG_SZ)">
|
||||
<Label Content="Expandable string" x:Name="spADMXRegAttributeExpandable" IsVisible="False"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="2" Grid.Column="1" x:Name="chkADMXRegAttributeExpandable"
|
||||
IsChecked="{Binding AttributeExpandable}" Margin="0,5,0,0" IsVisible="False"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Attribute: additive - Add the list value to an existing list. Existing values will be kept">
|
||||
<Label Content="Additive" x:Name="spADMXRegAttributeAdditive" IsVisible="False"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<CheckBox Grid.Row="3" Grid.Column="1" x:Name="chkADMXRegAttributeAdditive"
|
||||
IsChecked="{Binding AttributeAdditive}" Margin="0,5,0,0" IsVisible="False"/>
|
||||
|
||||
<StackPanel Grid.Row="4" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Attribute: valuePrefix - Add the list value to an existing list. Existing values will be kept">
|
||||
<Label Content="Value prefix" x:Name="spADMXRegAttributeValuePrefix" IsVisible="False"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="4" Grid.Column="1" x:Name="txtADMXRegAttributeValuePrefix"
|
||||
Text="{Binding AttributePrefix}" Margin="0,5,0,0" IsVisible="False"/>
|
||||
|
||||
<StackPanel Grid.Row="5" Orientation="Horizontal" Margin="0,0,5,0" VerticalAlignment="Center" ToolTip.Tip="Specify separator for List and MultiText values. ; is default.">
|
||||
<Label Content="Separator" x:Name="spADMXRegAttributeValueSeparator" IsVisible="False"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="5" Grid.Column="1" x:Name="txtADMXRegAttributeValueSeparator"
|
||||
Text="{Binding AttributeSeparator}" Width="50" MaxLength="1"
|
||||
HorizontalAlignment="Left" Margin="0,5,0,0" IsVisible="False"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="3" x:Name="grdADMXRegPolicyElements">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Content="Added reg values" Margin="0,0,5,0" VerticalAlignment="Top"
|
||||
ToolTip.Tip="Reg values added to the profile"/>
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Column="1" x:Name="dgADMXRegAddedElements"
|
||||
Margin="0,5,0,0" MinWidth="250"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
IsReadOnly="True"
|
||||
ItemsSource="{Binding PolicyElements}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Value Name" Binding="{Binding ValueName}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Data type" Binding="{Binding DataTypeDisplayString}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Value" Binding="{Binding Value}" Width="*"/>
|
||||
<DataGridTextColumn Header="Key" Binding="{Binding Key}" Width="Auto"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0">
|
||||
<Button x:Name="btnADMXRegAddNew" Content="Save" MinWidth="100" Margin="0,0,5,0"/>
|
||||
<Button x:Name="btnADMXRegCancel" Content="Cancel" MinWidth="100"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,90 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneToolsADMXRegValues.xaml.
|
||||
Translation notes:
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup="TitleColumn" dropped — no
|
||||
Avalonia equivalent. Auto-width title column matches well enough.
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- cbADMXRegPolicyType ItemTemplate is assigned in code (Avalonia has
|
||||
no DisplayMemberPath / SelectedValuePath); the underlying ItemsSource
|
||||
uses [SettingsListItem]. PolicyType (string) is sync'd on the
|
||||
DataContext via SelectionChanged.
|
||||
- DataGrid binding to ADMXPolicies works because the underlying C#
|
||||
class exposes ObservableCollection<ADMXRegPolicy>.
|
||||
- DataGrid.ContextMenu placed via ContextMenu attached property.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="5"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Content="Custom Profile Name" Margin="0,5,5,0" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Specify the name of the custom profile"/>
|
||||
<TextBox Grid.Column="1" x:Name="txtADMXRegProfileName" Text="{Binding ProfileName}" Margin="0,5,5,5"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Description for the custom profile">
|
||||
<Label Content="Custom Profile Description"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtADMXRegProfileDescription"
|
||||
Text="{Binding ProfileDescription}" Margin="0,5,5,5"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Select policy type, policy or preferences">
|
||||
<Label Content="Policy type"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" x:Name="cbADMXRegPolicyType" DisplayMemberBinding="{Binding Name}"
|
||||
Margin="0,5,0,0" MinWidth="250" HorizontalAlignment="Left"/>
|
||||
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Top" ToolTip.Tip="Reg values added to the policy">
|
||||
<Label Content="Added reg values"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<DataGrid CanUserResizeColumns="True" Grid.Row="3" Grid.Column="1" x:Name="dgADMXRegAddedPolicies"
|
||||
Margin="0,5,0,0" MinWidth="250"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
IsReadOnly="True"
|
||||
ItemsSource="{Binding ADMXPolicies}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Policy name" Binding="{Binding PolicyName}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Hive" Binding="{Binding Hive}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Path" Binding="{Binding Key}" Width="Auto"/>
|
||||
</DataGrid.Columns>
|
||||
<DataGrid.ContextMenu>
|
||||
<ContextMenu x:Name="mnuADMXRegPoliciesContextMenu">
|
||||
<MenuItem Header="Edit" x:Name="mnuADMXRegPolicyEdit"/>
|
||||
</ContextMenu>
|
||||
</DataGrid.ContextMenu>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0">
|
||||
<Button x:Name="btnADMXAddRegValue" Content="Add" MinWidth="100" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Add new reg value to the profile"/>
|
||||
<Button x:Name="btnADMXRegClear" Content="Clear" MinWidth="100" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Clear current values"/>
|
||||
<Button x:Name="btnADMXRegImport" Content="Import" MinWidth="100"
|
||||
ToolTip.Tip="Create ADMX profile in Intune"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,147 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneToolsADMXSettingProperties.xaml.
|
||||
Translation notes:
|
||||
- InfoIcon Rectangles dropped (no Avalonia DynamicResource for the WPF
|
||||
InfoIcon style). Tooltips on the controls cover the same info.
|
||||
- WPF Label ContentStringFormat="Setting: {0}" has no Avalonia analogue;
|
||||
lblADMXSettingName is named and gets its text set imperatively in
|
||||
Set-ADMXSettingProperties.
|
||||
- {Binding SupportedOn}, {Binding Description}, {Binding PolicyDefinition}
|
||||
replaced with named TextBoxes — Avalonia's binder can't read PSCustomObject
|
||||
NoteProperties (see [[avalonia-binding-needs-clr-types]]).
|
||||
- The Policy-tab elements grid was bound to a ScrollContentPresenter
|
||||
ActualWidth via FindAncestor RelativeSource. Avalonia handles that
|
||||
differently; the ScrollViewer's natural sizing is good enough here.
|
||||
- ScrollViewer.HorizontalScrollBarVisibility / VerticalScrollBarVisibility
|
||||
attached props on TextBox dropped — Avalonia TextBox has built-in
|
||||
scroll behaviour via TextWrapping + AcceptsReturn.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label x:Name="lblADMXSettingName"/>
|
||||
|
||||
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="btnADMXPreviousSetting" Content="Previous" MinWidth="100" Margin="0,0,5,0"/>
|
||||
<Button x:Name="btnADMXNextSetting" Content="Next" MinWidth="100"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<StackPanel Orientation="Vertical" Margin="5,5,0,0">
|
||||
<RadioButton GroupName="ADMXSettingStatus" x:Name="rbADMXSettingNotConfigured"
|
||||
Content="Not Configured"/>
|
||||
<RadioButton GroupName="ADMXSettingStatus" x:Name="rbADMXSettingEnabled"
|
||||
Content="Enabled" Margin="0,5,0,0"/>
|
||||
<RadioButton GroupName="ADMXSettingStatus" x:Name="rbADMXSettingDisabled"
|
||||
Content="Disabled" Margin="0,5,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<Grid Grid.Column="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="5"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="5"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Text="Intune OMA-URI name"
|
||||
ToolTip.Tip="Specify the name of the OMA-URI item. Policy name will be used if not specified"/>
|
||||
<TextBox Grid.Column="2" x:Name="txtADMXSettingName"/>
|
||||
|
||||
<TextBlock Text="Intune comment:" Grid.Row="2" VerticalAlignment="Top"
|
||||
ToolTip.Tip="Specify the name comment of the OMA-URI item. Policy help will be used if not specified"/>
|
||||
<TextBox Grid.Row="2" Grid.Column="2" x:Name="txtADMXSettingComment"
|
||||
IsReadOnly="True" Height="75" AcceptsReturn="True" TextWrapping="Wrap"/>
|
||||
|
||||
<TextBlock Text="Supported on:" Grid.Row="4"/>
|
||||
<TextBox Grid.Row="4" Grid.Column="2" x:Name="txtADMXSupportedOn"
|
||||
IsReadOnly="True" Height="40" AcceptsReturn="True" TextWrapping="Wrap"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<TabControl Margin="5,5,0,0" Grid.Row="2" x:Name="tcADMXPolicyConfig">
|
||||
<TabItem Header="Policy">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*" MinWidth="100"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="1*" MinWidth="100"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
|
||||
<Grid x:Name="grdADMXElements" HorizontalAlignment="Stretch"/>
|
||||
</ScrollViewer>
|
||||
|
||||
<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch"/>
|
||||
|
||||
<TextBox Grid.Column="2" x:Name="txtADMXSettingDescription"
|
||||
IsReadOnly="True" TextWrapping="Wrap" AcceptsReturn="True"/>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="OMA-URI Settings" x:Name="tabADMXSettings">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="5"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Text="String:" Grid.Row="0"/>
|
||||
<TextBox Grid.Row="1" x:Name="txtADMXSettings" AcceptsReturn="True" TextWrapping="Wrap"/>
|
||||
<CheckBox Grid.Row="3" x:Name="chkADMXManualConfig" Content="Manual configuration"/>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="XML Definition">
|
||||
<TextBox x:Name="txtADMXPolicyDefinition" IsReadOnly="True" AcceptsReturn="True" TextWrapping="NoWrap"/>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0">
|
||||
<Button x:Name="btnADMXSettingsOK" Content="OK" MinWidth="100" Margin="0,0,5,0"/>
|
||||
<Button x:Name="btnADMXSettingsCancel" Content="Cancel" MinWidth="100"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
@@ -0,0 +1,105 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneToolsAssignments.xaml. Translation notes:
|
||||
- Grid.IsSharedSizeScope / SharedSizeGroup dropped — no Avalonia
|
||||
equivalent. Replaced with plain Auto column for the labels.
|
||||
- DataGrid.RowStyle (WPF SystemColors + IsMouseOver / IsSelected
|
||||
triggers) dropped; Avalonia's Fluent DataGrid theme handles
|
||||
hover/selection states out of the box.
|
||||
- InfoIcon rectangles dropped. The labels here are unambiguous; an
|
||||
ⓘ glyph + tooltip could be added later if a tooltip pattern emerges.
|
||||
- ToolTip="..." -> ToolTip.Tip="..." per Avalonia attached-property syntax.
|
||||
- DataGridTextColumn / DataGridCheckBoxColumn carry over by name and
|
||||
require Avalonia.Controls.DataGrid.dll loaded + the DataGrid Fluent
|
||||
theme StyleInclude (both wired in AvaloniaHost.cs / Initialize-AvaloniaRuntime).
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Content="Source" Margin="0,0,5,2" VerticalAlignment="Center"/>
|
||||
<ComboBox x:Name="cbIntuneAssignmentsProvider" DisplayMemberBinding="{Binding Name}" Grid.Column="1" MinWidth="200"
|
||||
HorizontalAlignment="Left" Margin="0,2,0,2"/>
|
||||
|
||||
<Label Grid.Row="1" Content="Options" Margin="0,0,5,2" VerticalAlignment="Center"/>
|
||||
<Grid Grid.Row="1" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<ContentControl x:Name="ccIntuneAssignmentsProviderOptions" Margin="0,2,0,2"/>
|
||||
<Button Grid.Column="2" x:Name="btnGetIntuneAssignments"
|
||||
Padding="5,2,5,2" Content="Get Assignments"
|
||||
ToolTip.Tip="Read assignments from the selected source"/>
|
||||
</Grid>
|
||||
|
||||
<Label Grid.Row="2" Content="Filter" Margin="0,0,5,0" VerticalAlignment="Center"/>
|
||||
<TextBox x:Name="txtIntuneAssignmentsFilter" Grid.Column="1" Grid.Row="2" Margin="0,2,0,2"
|
||||
ToolTip.Tip="Filter items"/>
|
||||
|
||||
<!-- Items are [NameValueComboItem]; the Avalonia binder needs a real CLR
|
||||
type, so the plain Name/Value objects from Get-IntuneAssignmentViewOptions
|
||||
are wrapped in Show-IntuneAssignmentsTool. -->
|
||||
<Label Grid.Row="3" Content="View" Margin="0,0,5,0" VerticalAlignment="Center"/>
|
||||
<ComboBox x:Name="cbIntuneAssignmentsView" DisplayMemberBinding="{Binding Name}"
|
||||
Grid.Column="1" Grid.Row="3" MinWidth="200" HorizontalAlignment="Left" Margin="0,2,0,2"
|
||||
ToolTip.Tip="Show all policies, only those with assignments, or only those without"/>
|
||||
</Grid>
|
||||
|
||||
<DataGrid x:Name="dgIntuneAssignments" Grid.Row="1" Margin="0,5,0,0"
|
||||
AutoGenerateColumns="False" SelectionMode="Single" IsReadOnly="True"
|
||||
CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserSortColumns="True">
|
||||
<DataGrid.Columns>
|
||||
<!-- MinWidth keeps every header readable in a small window - Auto
|
||||
columns with empty cells collapsed below their header text and
|
||||
read as mystery empty columns. -->
|
||||
<DataGridTextColumn Header="Object Name" Binding="{Binding Name}" Width="Auto" MinWidth="150"/>
|
||||
<DataGridTextColumn Header="Object Type" Binding="{Binding Type}" Width="Auto" MinWidth="120"/>
|
||||
<DataGridTextColumn Header="Assignments" Binding="{Binding AssignmentCount}" Width="Auto" MinWidth="105"/>
|
||||
<DataGridCheckBoxColumn Header="Has Filters" Binding="{Binding HasFilters}" Width="Auto" MinWidth="95" IsReadOnly="True"/>
|
||||
<DataGridTextColumn Header="Included" Binding="{Binding IncludedString}" Width="1*" MinWidth="95"/>
|
||||
<DataGridTextColumn Header="Excluded" Binding="{Binding ExcludedString}" Width="1*" MinWidth="95"/>
|
||||
<DataGridTextColumn Header="Included Filters" Binding="{Binding IncludedFilterString}" Width="1*" MinWidth="120"/>
|
||||
<DataGridTextColumn Header="Excluded Filters" Binding="{Binding ExcludedFilterString}" Width="1*" MinWidth="120"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Grid Grid.Row="2" Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock x:Name="txtIntuneAssignmentsCount" VerticalAlignment="Center"
|
||||
Foreground="{DynamicResource TextColor}"/>
|
||||
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="btnIntuneAssignmentsCopy" Content="Copy" MinWidth="100" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Copy the assignments as CSV to the clipboard"/>
|
||||
<Button x:Name="btnIntuneAssignmentsSave" Content="Save" MinWidth="100"
|
||||
ToolTip.Tip="Save assignments to a CSV file"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,24 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
|
||||
<!--
|
||||
WPF original used {Binding ExportPath, UpdateSourceTrigger=PropertyChanged}
|
||||
with DataContext = the IntuneAssignmentsFolderProvider instance. The
|
||||
Avalonia port skips that binding because the provider class doesn't
|
||||
implement INotifyPropertyChanged; instead Register-IntuneAssignmentsProviderEvents
|
||||
sets TextBox.Text imperatively from Provider.ExportPath on open, and
|
||||
wires TextChanged + Browse-button click to push back to Provider.ExportPath.
|
||||
-->
|
||||
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBox x:Name="txtIntuneAssignmentsExportPath"
|
||||
ToolTip.Tip="Root folder for exported objects"/>
|
||||
<Button Grid.Column="2" x:Name="browseIntuneAssignmentsExportPath"
|
||||
Padding="5,2,5,2" Width="50" Content="..."
|
||||
ToolTip.Tip="Select folder with exported objects"/>
|
||||
</Grid>
|
||||
@@ -0,0 +1,6 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap"
|
||||
Foreground="{DynamicResource TextColor}"
|
||||
Text="All Intune object types will be read from the currently signed-in tenant."/>
|
||||
</Grid>
|
||||
@@ -0,0 +1,79 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/IntuneToolsFilterUsage.xaml. Same translation
|
||||
notes as IntuneToolsAssignments.axaml: Grid.IsSharedSizeScope /
|
||||
SharedSizeGroup dropped, DataGrid.RowStyle dropped (Fluent theme
|
||||
handles selection/hover), InfoIcon rectangles dropped, ToolTip ->
|
||||
ToolTip.Tip.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Content="Action" Margin="0,0,5,2" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" VerticalAlignment="Center"
|
||||
Foreground="{DynamicResource TextColor}" Opacity="0.7"
|
||||
Text="Click Get Filter Usage to enumerate every assignment filter and resolve the policies / apps / scripts that reference it."
|
||||
TextWrapping="Wrap"/>
|
||||
<Button Grid.Column="3" x:Name="btnGetIntuneFilterUsage" Padding="5,2,5,2"
|
||||
Content="Get Filter Usage"
|
||||
ToolTip.Tip="Read every assignment filter and resolve its payloads (policies, groups) via batched Graph calls"/>
|
||||
|
||||
<Label Grid.Row="1" Content="Filter" Margin="0,0,5,0" VerticalAlignment="Center"/>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Margin="0,2,0,2"
|
||||
x:Name="txtIntuneFilterUsageFilter"
|
||||
ToolTip.Tip="Filter rows by any visible column"/>
|
||||
</Grid>
|
||||
|
||||
<DataGrid x:Name="dgIntuneFilterUsage" Grid.Row="1" Margin="0,5,0,0"
|
||||
AutoGenerateColumns="False" SelectionMode="Single" IsReadOnly="True"
|
||||
CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserSortColumns="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Filter Name" Binding="{Binding FilterName}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Platform" Binding="{Binding Platform}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Filter Type" Binding="{Binding FilterType}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Policy Name" Binding="{Binding PolicyName}" Width="1*"/>
|
||||
<DataGridTextColumn Header="Type" Binding="{Binding PayloadType}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Mode" Binding="{Binding Mode}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Group" Binding="{Binding GroupName}" Width="1*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Grid Grid.Row="2" Margin="0,5,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock x:Name="txtIntuneFilterUsageCount" VerticalAlignment="Center"
|
||||
Foreground="{DynamicResource TextColor}"/>
|
||||
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="btnIntuneFilterUsageCopy" Content="Copy" MinWidth="100" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Copy the visible rows to the clipboard as CSV"/>
|
||||
<Button x:Name="btnIntuneFilterUsageSave" Content="Save" MinWidth="100"
|
||||
ToolTip.Tip="Save the visible rows to a CSV file"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,68 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Margin="5">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/LogInfo.xaml. WPF DataTrigger for
|
||||
row coloring (Type==2 orange, Type==3 red) is replaced with a row
|
||||
Style that binds Foreground to LogRowItem.RowForeground — the brush
|
||||
is computed at projection time in Update-LogView so the binder doesn't
|
||||
have to do any conversion.
|
||||
-->
|
||||
|
||||
<Grid.Styles>
|
||||
<Style Selector="DataGridRow">
|
||||
<Setter Property="Foreground" Value="{Binding RowForeground}"/>
|
||||
</Style>
|
||||
</Grid.Styles>
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="4*" MinHeight="300"/>
|
||||
<RowDefinition Height="3"/>
|
||||
<RowDefinition Height="1*" MinHeight="100"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<DataGrid x:Name="dgLogInfo"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
IsReadOnly="True"
|
||||
CanUserReorderColumns="True"
|
||||
CanUserResizeColumns="True"
|
||||
CanUserSortColumns="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Date" Binding="{Binding DateTime, StringFormat=\{0:d\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Time" Binding="{Binding DateTime, StringFormat=\{0:HH:mm:ss.fff\}}" Width="Auto"/>
|
||||
<DataGridTextColumn Header="Type" Binding="{Binding TypeText}" Width="Auto"/>
|
||||
<DataGridTemplateColumn Header="Text" Width="*">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Text}" TextWrapping="NoWrap"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
|
||||
|
||||
<Grid Grid.Row="2" DataContext="{Binding #dgLogInfo.SelectedItem}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Text="Date\Time" Grid.Row="0" Grid.Column="0"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="2"
|
||||
Text="{Binding DateTime, StringFormat=\{0:yyyy-MM-dd HH:mm:ss.fff\}}"/>
|
||||
|
||||
<TextBox Grid.Row="1" Grid.ColumnSpan="3" x:Name="txtLogInfo"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
Text="{Binding Text}" IsReadOnly="True" AcceptsReturn="True"
|
||||
TextWrapping="Wrap"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -0,0 +1,16 @@
|
||||
<Border xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" Padding="5"
|
||||
Background="{DynamicResource WindowBackgroundColor}"
|
||||
Width="340">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/LoginPanel.xaml. The WPF original used a Grid
|
||||
with dynamic RowDefinitions; we use a StackPanel so Add-CachedUser can
|
||||
just Children.Add($row) without managing row indices. The "Sign in with
|
||||
a different account" footer button is appended after the cached rows
|
||||
by Show-CachedAccountPicker.
|
||||
-->
|
||||
|
||||
<StackPanel x:Name="grdAccounts" Orientation="Vertical" Margin="5,0,5,0"/>
|
||||
</Border>
|
||||
@@ -0,0 +1,259 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title="Cloud API PowerShell Management"
|
||||
Width="1280" Height="800"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
ExtendClientAreaToDecorationsHint="True"
|
||||
ExtendClientAreaTitleBarHeightHint="32"
|
||||
ExtendClientAreaChromeHints="PreferSystemChrome"
|
||||
Background="{DynamicResource WindowBackgroundColor}"
|
||||
x:Name="Window">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/MainWindow.xaml.
|
||||
|
||||
WPF used WindowStyle=None + WindowChrome to draw a fully custom title bar
|
||||
with hand-rolled minimize/maximize/close buttons. Avalonia's idiomatic
|
||||
equivalent: ExtendClientAreaToDecorationsHint extends our content into
|
||||
the caption area while PreferSystemChrome keeps the OS-painted system
|
||||
buttons. Result: same merged title+menu layout, far less custom chrome
|
||||
to maintain (and free Win11 rounded corners).
|
||||
|
||||
Named elements mirror the WPF version so the eventual menu/view
|
||||
plumbing port can wire to the same handles.
|
||||
|
||||
Deferred (vs WPF):
|
||||
- ListBox grouped layout (WPF GroupStyle has no Avalonia equivalent;
|
||||
grouped views currently are just IntuneTools — re-introduce via
|
||||
DataGridCollectionView or a TreeView when porting that view).
|
||||
- AccessType color triggers on ListBoxItem (replace with Classes
|
||||
driven from PS when porting Show-ViewMenu).
|
||||
-->
|
||||
|
||||
<Grid x:Name="Grid">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Top bar: icon + menu + (drag region) + env badge + profile slot. System
|
||||
min/max/close are painted by Windows on the right (PreferSystemChrome).
|
||||
Window drag is wired in code (PointerPressed -> BeginMoveDrag) because
|
||||
ExtendClientAreaToDecorationsHint + a Background brush block the OS
|
||||
caption hit-test; buttons/menus mark PointerPressed Handled so they
|
||||
don't trigger drag. -->
|
||||
<Border x:Name="borderTitleBar" Grid.Row="0" Grid.ColumnSpan="2"
|
||||
Background="{DynamicResource TitleBackgroundColor}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="0,0,0,1">
|
||||
<!-- Right margin reserves space for the Win11 system min/max/close
|
||||
buttons (PreferSystemChrome draws them over the right edge).
|
||||
Without this, grdMenu (avatar / Sign-in) collides with Close.
|
||||
Windows-specific: Set-MainWindowChrome (Extensions/WindowChromeAvalonia.ps1)
|
||||
rewrites this margin off-Windows - 0 on Linux (the WM draws its own
|
||||
caption) and left-side on macOS (traffic lights). -->
|
||||
<Grid x:Name="grdTitleBarContent" Margin="0,0,140,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Image x:Name="imgTitleIcon" Grid.Column="0" Width="18" Height="18"
|
||||
Margin="8,0,4,0" VerticalAlignment="Center"/>
|
||||
|
||||
<Menu Name="mnuMain" Grid.Column="1" Padding="0" Background="Transparent"
|
||||
VerticalAlignment="Center">
|
||||
<MenuItem Header="_File" Name="mnuFile">
|
||||
<MenuItem Header="_Settings" Name="mnuSettings"/>
|
||||
<MenuItem Header="_Tenant Settings" Name="mnuTenantSettings"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="_Release Notes" Name="mnuUpdates"/>
|
||||
<MenuItem Header="_About" Name="mnuAbout"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="_Exit" Name="mnuExit"/>
|
||||
</MenuItem>
|
||||
<MenuItem Name="mnuViews" Header="_Views"/>
|
||||
</Menu>
|
||||
|
||||
<!-- Centered active-view title; populated by Set-MainTitle. -->
|
||||
<TextBlock x:Name="txtTitleViewName" Grid.Column="2"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
FontWeight="SemiBold" FontSize="13"
|
||||
Foreground="{DynamicResource TitleForegroundColor}"
|
||||
TextTrimming="CharacterEllipsis"
|
||||
Margin="12,0,12,0"/>
|
||||
|
||||
<!-- Env + tenant badge; Set-EnvironmentInfo flips IsVisible and sets text. -->
|
||||
<Border x:Name="borderEnvBadge" Grid.Column="3" CornerRadius="3" Padding="10,2" Margin="4"
|
||||
IsVisible="False" VerticalAlignment="Center">
|
||||
<TextBlock Name="txtEnvBadge" FontWeight="Bold" FontSize="12"/>
|
||||
</Border>
|
||||
|
||||
<!-- Profile picture container; Show-AuthenticationInfo drops controls into here. -->
|
||||
<Grid x:Name="grdMenu" Grid.Column="4" VerticalAlignment="Center" Margin="4,0,4,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Right pane: active view content. -->
|
||||
<Grid Name="grdViewPanel" Grid.Column="1" Grid.RowSpan="2" Grid.Row="1" Margin="0,5,5,5"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
|
||||
|
||||
<!-- Vertical divider between left nav and right pane. -->
|
||||
<Border Grid.Row="1" Grid.Column="0" HorizontalAlignment="Right"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="0,0,1,0"/>
|
||||
|
||||
<!-- Left nav: title strip + menu items list. -->
|
||||
<Grid Grid.Row="1" Margin="5,5,6,5" VerticalAlignment="Stretch" Name="grdViewItemMenu">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid Margin="0,0,0,5" MinHeight="30" Background="{DynamicResource TitleBackgroundColor}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Content="" Name="lblMenuTitle" FontWeight="Bold" VerticalAlignment="Center" Background="Transparent"/>
|
||||
<!-- Per-view config gear; views with toggles flip IsVisible and bind a Flyout. -->
|
||||
<Button Grid.Column="1" Name="btnMenuTitleConfig" IsVisible="False"
|
||||
Width="26" Height="26" Margin="0,0,4,0"
|
||||
Padding="0" BorderThickness="0"
|
||||
VerticalAlignment="Center" HorizontalAlignment="Right"
|
||||
Background="Transparent" BorderBrush="Transparent"
|
||||
Cursor="Hand" ToolTip.Tip="Switch menu view">
|
||||
<Viewbox Width="16" Height="16" Stretch="Uniform">
|
||||
<Canvas Width="24" Height="24">
|
||||
<Path Fill="{DynamicResource TextColor}"
|
||||
Data="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 00.12-.61l-1.92-3.32a.488.488 0 00-.59-.22l-2.39.96a7 7 0 00-1.62-.94l-.36-2.54a.484.484 0 00-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94 0 .31.02.64.07.94l-2.03 1.58a.49.49 0 00-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6 0-1.98 1.62-3.6 3.6-3.6s3.6 1.62 3.6 3.6c0 1.98-1.62 3.6-3.6 3.6z"/>
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
<Button.Flyout>
|
||||
<MenuFlyout>
|
||||
<MenuItem Header="_Group" Name="mnuMenuTitleConfigGroup" ToggleType="CheckBox"/>
|
||||
<MenuItem Header="_API" Name="mnuMenuTitleConfigType" ToggleType="CheckBox"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Show read-only _Info" Name="mnuMenuTitleConfigShowInfo" ToggleType="CheckBox" ToolTip.Tip="Show the read-only Intune Info items (Baseline Templates, Tenant Settings, Google Play status, ...)"/>
|
||||
<!-- Hidden 2026-06-12 per user decision; counts machinery kept for potential re-enable. -->
|
||||
<MenuItem Header="Show item _counts" Name="mnuMenuTitleConfigShowCounts" ToggleType="CheckBox" IsVisible="False"/>
|
||||
<!-- Sub-menu items added at runtime: one per platform present in
|
||||
the current grid + a "(no platform)" entry when applicable. -->
|
||||
<MenuItem Header="Filter _platforms" Name="mnuMenuTitleConfigFilterPlatforms"/>
|
||||
<MenuItem Header="_Refresh" Name="mnuMenuTitleConfigRefresh"/>
|
||||
</MenuFlyout>
|
||||
</Button.Flyout>
|
||||
</Button>
|
||||
</Grid>
|
||||
<ListBox Grid.Row="1" Name="lstMenuItems" SelectionMode="Single"
|
||||
Background="{DynamicResource PanelBackgroundColor}">
|
||||
<ListBox.Styles>
|
||||
<!-- Headers are visual-only category labels; making the
|
||||
container non-hit-testable + non-focusable keeps them
|
||||
out of mouse + keyboard selection. Show-ViewMenu also
|
||||
filters the SelectionChanged handler as a safety net. -->
|
||||
<Style Selector="ListBoxItem">
|
||||
<Setter Property="IsHitTestVisible" Value="{Binding !IsHeader}"/>
|
||||
<Setter Property="Focusable" Value="{Binding !IsHeader}"/>
|
||||
</Style>
|
||||
<!-- Permission marking. WPF does this with DataTriggers on
|
||||
AccessType; Avalonia has none, so Get-IntuneViewItems
|
||||
sets the two booleans and these class selectors colour
|
||||
the label. Orange = readable but not writable, red =
|
||||
no access at all (a group is only red when every member
|
||||
type is unusable). -->
|
||||
<Style Selector="TextBlock.accessLimited">
|
||||
<Setter Property="Foreground" Value="{DynamicResource AccessLimitedColor}"/>
|
||||
</Style>
|
||||
<Style Selector="TextBlock.accessNone">
|
||||
<Setter Property="Foreground" Value="{DynamicResource AccessNoneColor}"/>
|
||||
</Style>
|
||||
</ListBox.Styles>
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid>
|
||||
<!-- Header row (Category title, SemiBold). Only
|
||||
visible on rows Show-ViewMenu inserted with
|
||||
IsHeader=$true. -->
|
||||
<TextBlock Text="{Binding Title}"
|
||||
FontWeight="SemiBold"
|
||||
IsVisible="{Binding IsHeader}"
|
||||
Margin="0,4,0,2"/>
|
||||
<!-- Leaf row (icon + MenuLabel). Avalonia bindings
|
||||
have no DataTrigger so we can't conditionally
|
||||
indent only inside grouped menus; rather than
|
||||
indent flat menus too, we rely on the SemiBold
|
||||
header alone to convey the group hierarchy. -->
|
||||
<Grid IsVisible="{Binding !IsHeader}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<ContentControl Content="{Binding IconImage}" Width="16" Height="16" Margin="0,0,5,0"/>
|
||||
<TextBlock Text="{Binding MenuLabel}" Grid.Column="1"
|
||||
Classes.accessLimited="{Binding IsAccessLimited}"
|
||||
Classes.accessNone="{Binding IsAccessNone}"
|
||||
ToolTip.Tip="{Binding AccessInfo}"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</Grid>
|
||||
|
||||
<!-- Light-dim popup layer (Show-Popup mounts content into cvsPopup). -->
|
||||
<Grid Name="grdPopup" Grid.ColumnSpan="2" Grid.RowSpan="3" IsVisible="False">
|
||||
<Grid.Background>
|
||||
<SolidColorBrush Color="Black" Opacity="0.04"/>
|
||||
</Grid.Background>
|
||||
<Canvas Name="cvsPopup"/>
|
||||
</Grid>
|
||||
|
||||
<!-- Modal dim layer (Show-ModalForm mounts content into the centre cell). -->
|
||||
<Grid Name="grdModal" Grid.ColumnSpan="2" Grid.RowSpan="3" IsVisible="False">
|
||||
<Grid.Background>
|
||||
<SolidColorBrush Opacity="0.5" Color="Black"/>
|
||||
</Grid.Background>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="15*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
<ColumnDefinition Width="15*"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
</Grid>
|
||||
|
||||
<!-- Status overlay (Set-StatusInfo writes to txtInfo / txtInfoDetail). -->
|
||||
<Grid Name="grdStatus" Grid.ColumnSpan="2" Grid.RowSpan="3" IsVisible="False">
|
||||
<Grid.Background>
|
||||
<SolidColorBrush Opacity="0.5" Color="Black"/>
|
||||
</Grid.Background>
|
||||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||
<!-- TextBlock (not Label): Label treats a single '_' as an access-key
|
||||
marker and strips it, mangling names like adm_user -> admuser. -->
|
||||
<TextBlock Name="txtInfo" Text="" HorizontalAlignment="Center" Foreground="White"/>
|
||||
<TextBlock Name="txtInfoDetail" Text="" HorizontalAlignment="Center" Foreground="#CCFFFFFF" FontSize="11" Margin="0,-4,0,0" IsVisible="False"/>
|
||||
<!-- Shown only when a caller passes Write-Status -CancelText, so a wait
|
||||
that would otherwise run to its timeout (device code, browser
|
||||
sign-in) can be abandoned. Click calls Request-StatusCancel. -->
|
||||
<Button Name="btnStatusCancel" Content="Cancel" HorizontalAlignment="Center" MinWidth="90" Padding="16,3" Margin="0,12,0,0" IsVisible="False"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,80 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title=""
|
||||
SystemDecorations="BorderOnly"
|
||||
SizeToContent="WidthAndHeight"
|
||||
CanResize="False"
|
||||
MinWidth="280"
|
||||
ShowInTaskbar="False"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
Background="{DynamicResource WindowBackgroundColor}">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/MessageBox.xaml.
|
||||
WPF used WindowStyle=None + WindowChrome to draw a fully custom title bar.
|
||||
Avalonia equivalent: SystemDecorations=BorderOnly removes the OS title
|
||||
bar so we draw our own (icon + title + close glyph). Result colors and
|
||||
layout match the WPF version 1:1.
|
||||
-->
|
||||
|
||||
<Border BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Custom title bar -->
|
||||
<Grid Grid.Row="0" Background="{DynamicResource TitleBackgroundColor}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock x:Name="txtCaption" Grid.Column="0"
|
||||
Foreground="{DynamicResource TitleForegroundColor}"
|
||||
VerticalAlignment="Center" Margin="10,0,0,0" FontSize="12"/>
|
||||
|
||||
<Button x:Name="btnTitleClose" Grid.Column="1" Content="✕"
|
||||
Width="46" Background="Transparent" BorderThickness="0"
|
||||
Foreground="{DynamicResource TitleForegroundColor}"
|
||||
FontSize="11"/>
|
||||
</Grid>
|
||||
|
||||
<!-- Content area -->
|
||||
<Grid Grid.Row="1" Margin="16,14,16,12">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="14"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Icon + message -->
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Border x:Name="iconBorder" Width="30" Height="30" CornerRadius="15"
|
||||
Margin="0,2,12,0" VerticalAlignment="Top" IsVisible="False">
|
||||
<TextBlock x:Name="iconSymbol" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
FontWeight="Bold" FontSize="14" Foreground="White"/>
|
||||
</Border>
|
||||
|
||||
<TextBlock x:Name="txtMessage" Grid.Column="1"
|
||||
TextWrapping="Wrap" MinWidth="240" MaxWidth="460"
|
||||
VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
|
||||
<!-- Buttons -->
|
||||
<WrapPanel Grid.Row="2" HorizontalAlignment="Right" Margin="0,2,0,0">
|
||||
<Button x:Name="btnYes" MinWidth="78" Margin="0,0,8,0" Padding="8,3" IsVisible="False" Content="_Yes"/>
|
||||
<Button x:Name="btnNo" MinWidth="78" Margin="0,0,8,0" Padding="8,3" IsVisible="False" Content="_No"/>
|
||||
<Button x:Name="btnOK" MinWidth="78" Margin="0,0,8,0" Padding="8,3" IsVisible="False" Content="_OK"/>
|
||||
<Button x:Name="btnCancel" MinWidth="78" Padding="8,3" IsVisible="False" Content="_Cancel"/>
|
||||
</WrapPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Window>
|
||||
@@ -0,0 +1,37 @@
|
||||
<Border xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" Padding="5"
|
||||
Background="{DynamicResource WindowBackgroundColor}">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/ModalForm.xaml.
|
||||
|
||||
Modal host: Show-ModalForm parses this, drops the form's content into
|
||||
grdModalContainer (Grid.Row=1), then mounts the whole Border into the
|
||||
MainWindow's grdModal overlay. Title, close button, and named handles
|
||||
match the WPF version so existing dialog ports can wire to the same
|
||||
names.
|
||||
|
||||
WPF -> Avalonia translations:
|
||||
- Visibility="Collapsed" -> IsVisible="False"
|
||||
- System.Windows.Controls.Grid.Row attached property is set in code
|
||||
via [Avalonia.Controls.Grid]::SetRow($obj, 1)
|
||||
-->
|
||||
<Grid HorizontalAlignment="Stretch" Name="grdModalContainer" VerticalAlignment="Stretch"
|
||||
Background="{DynamicResource WindowBackgroundColor}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Border Background="{DynamicResource TitleBackgroundColor}" BorderThickness="0">
|
||||
<TextBlock Name="txtTitle" Margin="5" FontWeight="Bold"
|
||||
Foreground="{DynamicResource TitleForegroundColor}"/>
|
||||
</Border>
|
||||
|
||||
<StackPanel Name="spButtons" Grid.Row="2" HorizontalAlignment="Right"
|
||||
Orientation="Horizontal" Margin="0,5,0,5">
|
||||
<Button Name="btnClose" Width="100" Margin="15,0,0,0" Content="Close"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
@@ -0,0 +1,257 @@
|
||||
<TabControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
SelectedIndex="0" Margin="0,5,0,5">
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/ObjectDetails.xaml. Hosted via Show-ModalForm.
|
||||
|
||||
WPF -> Avalonia translations applied:
|
||||
- Window root not present (the WPF version was already a TabControl).
|
||||
- InfoIcon Rectangles are rendered as the info-icon glyph (Themes/Styles.axaml);
|
||||
the description sits on the wrapping StackPanel so hovering the label shows it too.
|
||||
- DisplayMemberPath="Name" / "Property" on ListBoxes dropped — Avalonia
|
||||
has no DisplayMemberPath; ItemTemplates are assigned imperatively in
|
||||
Show-IntuneManagerDetailedView (avalonia-binding-needs-clr-types
|
||||
applies to lstBasicProperties / lstObjectProperties; lstObjectColumns
|
||||
binds to ObjectColumnInfo which is a real C# class with INPC).
|
||||
- Visibility="Collapsed" -> IsVisible="False" (only reached imperatively
|
||||
for btnFull when AllowFullDetails=$false; default visible here).
|
||||
- WPF MouseDoubleClick on ListBox -> Avalonia DoubleTapped (wired in PS).
|
||||
- The TextBox bindings on the per-column editor (Property / Header) work
|
||||
against ObjectColumnInfo (C# INotifyPropertyChanged class) — TwoWay
|
||||
is the default for TextBox.Text in Avalonia 11.
|
||||
-->
|
||||
<TabItem Header="Json">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBox Name="txtValue" Grid.Column="1" Grid.Row="1"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Auto"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
IsReadOnly="True" AcceptsReturn="True"
|
||||
MinWidth="250" Margin="0"/>
|
||||
|
||||
<WrapPanel Name="pnlButtons" Grid.Row="2" Grid.ColumnSpan="2"
|
||||
HorizontalAlignment="Right" Margin="0,5,0,0">
|
||||
<Button Name="btnFull" MinWidth="100" Margin="0,0,5,0"
|
||||
Content="Load full"
|
||||
ToolTip.Tip="Load full info of the object"/>
|
||||
<Button Name="btnCopy" MinWidth="100" Margin="0,0,0,0"
|
||||
Content="Copy"
|
||||
ToolTip.Tip="Copy text to clipboard"/>
|
||||
</WrapPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="Settings">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Center" ToolTip.Tip="Name of the object">
|
||||
<Label Content="Name"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtObjectName" Grid.Row="0" Grid.Column="1"
|
||||
Margin="0,5,5,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5,5,0" VerticalAlignment="Top" ToolTip.Tip="Description for the object">
|
||||
<Label Content="Description"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtObjectDescription" Grid.Row="1" Grid.Column="1"
|
||||
AcceptsReturn="True" Height="100"
|
||||
TextWrapping="Wrap" Margin="0,5,5,0"/>
|
||||
|
||||
<StackPanel Name="pnlScopeTagsLabel" Orientation="Horizontal"
|
||||
Grid.Row="2" Grid.ColumnSpan="2" Margin="0,10,5,0"
|
||||
HorizontalAlignment="Left">
|
||||
<Label Content="Scope Tags"
|
||||
ToolTip.Tip="Move tags between the lists to change assignment. Changes are not applied until you press Save."/>
|
||||
</StackPanel>
|
||||
|
||||
<Grid Name="grdScopeTags" Grid.Row="3" Grid.ColumnSpan="2"
|
||||
Height="180" Margin="0,5,5,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label Content="Available" Grid.Row="0" Grid.Column="0" Padding="0,0,0,2" FontSize="11"/>
|
||||
<Label Content="Assigned" Grid.Row="0" Grid.Column="2" Padding="0,0,0,2" FontSize="11"/>
|
||||
|
||||
<ListBox Name="lstAvailableScopeTags" DisplayMemberBinding="{Binding Name}" Grid.Row="1" Grid.Column="0"
|
||||
SelectionMode="Multiple" Margin="0,0,5,0"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Vertical"
|
||||
VerticalAlignment="Center" Margin="0,0,5,0">
|
||||
<Button Name="btnScopeTagAssign" Content=">" Width="40" Margin="0,0,0,5"
|
||||
ToolTip.Tip="Assign selected tag(s)"/>
|
||||
<Button Name="btnScopeTagUnassign" Content="<" Width="40"
|
||||
ToolTip.Tip="Unassign selected tag(s)"/>
|
||||
</StackPanel>
|
||||
|
||||
<ListBox Name="lstAssignedScopeTags" DisplayMemberBinding="{Binding Name}" Grid.Row="1" Grid.Column="2"
|
||||
SelectionMode="Multiple" Margin="5,0,0,0"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="2"
|
||||
Orientation="Horizontal" HorizontalAlignment="Right"
|
||||
Margin="5,5,5,5">
|
||||
<Button Name="btnObjectSettingsSave" Content="Save" Width="100"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<TabItem Header="Columns">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label Content="Properties" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Properties of the current object"/>
|
||||
|
||||
<Grid Grid.Row="1" Grid.RowSpan="99">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="50*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="50*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label Content="Basic Properties" Grid.Row="0"/>
|
||||
<ListBox Name="lstBasicProperties" DisplayMemberBinding="{Binding Name}" SelectionMode="Single" Grid.Row="1" MinWidth="150"/>
|
||||
|
||||
<Label Content="Object Properties" Grid.Row="2"/>
|
||||
<ListBox Name="lstObjectProperties" DisplayMemberBinding="{Binding Name}" SelectionMode="Single" Grid.Row="3" MinWidth="150"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Grid.Column="1" Margin="5,0,5,0">
|
||||
<Button Content=">" Name="btnBasicColumnsAdd" Width="50"
|
||||
ToolTip.Tip="Add basic property"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="3" Grid.Column="1" Margin="5,0,5,0">
|
||||
<Button Content=">" Name="btnObjectColumnsAdd" Width="50"
|
||||
ToolTip.Tip="Add object property"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
|
||||
Grid.Row="1" Grid.Column="2">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label Content="Column settings" Grid.Row="0"/>
|
||||
|
||||
<ListBox Name="lstObjectColumns" DisplayMemberBinding="{Binding Property}" SelectionMode="Single" Grid.Row="1"
|
||||
MinWidth="150" Height="200"/>
|
||||
|
||||
<StackPanel Grid.Column="1" Margin="5,0,0,0" HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center" Grid.Row="1">
|
||||
<Button Content="Up" Name="btnObjectColumnsMoveUp" Width="68"
|
||||
ToolTip.Tip="Move the selected column up"/>
|
||||
<Button Content="Down" Name="btnObjectColumnsMoveDown" Width="68"
|
||||
Margin="0,5,0,0" ToolTip.Tip="Move the selected column down"/>
|
||||
<Button Content="Delete" Name="btnObjectColumnsDelete" Width="68"
|
||||
Margin="0,5,0,0" ToolTip.Tip="Delete the selected column"/>
|
||||
<Button Content="Clear" Name="btnObjectColumnsClear" Width="68"
|
||||
Margin="0,5,0,0" ToolTip.Tip="Delete all custom columns"/>
|
||||
</StackPanel>
|
||||
|
||||
<CheckBox Grid.Row="2" Name="chkObjectColumnOverride" Grid.ColumnSpan="2"
|
||||
Content="Override default columns" VerticalAlignment="Center"
|
||||
ToolTip.Tip="Do not add default columns first. If this is checked then only the properties in the list will be displayed"/>
|
||||
|
||||
<Grid Grid.Row="3" Grid.ColumnSpan="2" Name="grdObjectColumns">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,5,5,0" ToolTip.Tip="Property to display. Sub properties and array values are supported eg files[0].displayName">
|
||||
<Label Content="Property"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtObjectColumnsProperty" Text="{Binding Property}"
|
||||
Margin="0,5,5,0" Grid.Row="0" Grid.Column="1"/>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,5,5,0" ToolTip.Tip="Header for the property. Name of property will be used if not specified">
|
||||
<Label Content="Header"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="txtObjectColumnsHeader" Text="{Binding Header}"
|
||||
Margin="0,5,5,0" Grid.Row="1" Grid.Column="1"/>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,5,5,0" ToolTip.Tip="Current property settings. Only updated when saved">
|
||||
<Label Content="Current settings:"/>
|
||||
<TextBlock Classes="info-icon"/>
|
||||
</StackPanel>
|
||||
<TextBox Name="lblObjectColumnsConfig" IsReadOnly="True"
|
||||
BorderThickness="0" Background="Transparent" Padding="0"
|
||||
Margin="5,5,5,0" Grid.Row="3" Grid.ColumnSpan="2"/>
|
||||
|
||||
<StackPanel Orientation="Horizontal" Grid.Column="1" Margin="5,5,5,0"
|
||||
Grid.Row="4" Grid.ColumnSpan="2" HorizontalAlignment="Right">
|
||||
<Button Name="btnObjectColumnsReset" Content="Reset"
|
||||
Margin="0,0,5,0" Width="100"
|
||||
ToolTip.Tip="Revert all changes"/>
|
||||
<Button Name="btnObjectColumnsSave" Content="Save"
|
||||
Margin="0,0,0,0" Width="100"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
@@ -0,0 +1,84 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title="Select" Height="500" Width="620"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
CanResize="True"
|
||||
ShowInTaskbar="False">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/PickerDialog.xaml.
|
||||
Translation notes:
|
||||
- Window-shaped sub-modal (uses Host::ShowDialog for sync semantics —
|
||||
same as InputDialog). Sits on top of any active grdModal stack.
|
||||
- WPF SelectionMode/SelectionUnit/CanUserAddRows mapped to Avalonia
|
||||
equivalents (no SelectionUnit on Avalonia DataGrid — full-row is
|
||||
the default).
|
||||
- GroupBox replaced by a bordered StackPanel ([[avalonia-no-groupbox]]).
|
||||
- WPF MouseDoubleClick / PreviewKeyDown wired in code via DoubleTapped
|
||||
and KeyDown.
|
||||
-->
|
||||
|
||||
<Grid Margin="10"
|
||||
RowDefinitions="Auto,Auto,Auto,*,Auto,Auto">
|
||||
|
||||
<!--
|
||||
Tenant selector. Hidden unless more than one tenant is signed in.
|
||||
Items are [SettingsListItem] (Name/Value) rather than the raw
|
||||
objects: Avalonia has no DisplayMemberPath and cannot bind
|
||||
NoteProperties, so the display text needs a real CLR property.
|
||||
-->
|
||||
<Grid x:Name="grdPickerTenant" Grid.Row="0" Margin="0,0,0,5"
|
||||
ColumnDefinitions="70,5,*" IsVisible="False">
|
||||
<TextBlock Grid.Column="0" Text="Tenant" VerticalAlignment="Center"/>
|
||||
<ComboBox x:Name="cbPickerTenant" Grid.Column="2" HorizontalAlignment="Stretch">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Name}"/>
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
</Grid>
|
||||
|
||||
<!-- Scope selector. Hidden unless the caller passes -Scopes. -->
|
||||
<Grid x:Name="grdPickerScope" Grid.Row="1" Margin="0,0,0,5"
|
||||
ColumnDefinitions="70,5,*" IsVisible="False">
|
||||
<TextBlock Grid.Column="0" Text="Search in" VerticalAlignment="Center"/>
|
||||
<ComboBox x:Name="cbPickerScope" Grid.Column="2" HorizontalAlignment="Stretch">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Name}"/>
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="2" Margin="0,0,0,5"
|
||||
ColumnDefinitions="*,5,Auto">
|
||||
<TextBox x:Name="txtPickerSearch" Grid.Column="0" VerticalContentAlignment="Center" Padding="3,2,3,2"/>
|
||||
<Button x:Name="btnPickerSearch" Grid.Column="2" Content="Search" MinWidth="70" Padding="5,2,5,2"/>
|
||||
</Grid>
|
||||
|
||||
<DataGrid x:Name="dgPickerObjects" Grid.Row="3"
|
||||
AutoGenerateColumns="False"
|
||||
SelectionMode="Single"
|
||||
CanUserResizeColumns="True"
|
||||
IsReadOnly="True"/>
|
||||
|
||||
<Border x:Name="grpPickerStatus" Grid.Row="4" Margin="0,5,0,0"
|
||||
BorderThickness="1"
|
||||
BorderBrush="{DynamicResource SystemBaseMediumLowColor}"
|
||||
Padding="6,4,6,4"
|
||||
IsVisible="False">
|
||||
<TextBlock x:Name="txtPickerStatus" TextWrapping="Wrap"/>
|
||||
</Border>
|
||||
|
||||
<Grid Grid.Row="5" Margin="0,5,0,0"
|
||||
ColumnDefinitions="Auto,*">
|
||||
<Button x:Name="btnPickerLoadAll" Grid.Column="0" Content="Load all from Intune" Padding="8,2,8,2" IsVisible="False"/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" Spacing="5">
|
||||
<Button x:Name="btnPickerOK" Content="OK" MinWidth="75" IsEnabled="False" IsDefault="True"/>
|
||||
<Button x:Name="btnPickerCancel" Content="Cancel" MinWidth="75" IsCancel="True"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,112 @@
|
||||
<Border xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" Padding="8"
|
||||
Background="{DynamicResource WindowBackgroundColor}"
|
||||
Width="480">
|
||||
|
||||
<!-- Port of UI/WPF/XAML/ProfileInfo.xaml. -->
|
||||
|
||||
<Grid x:Name="ProfileInfo">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock x:Name="txtOrganization" Grid.Row="0" Grid.Column="0"
|
||||
Margin="5" FontWeight="Bold" TextTrimming="CharacterEllipsis"/>
|
||||
<Button x:Name="btnProfileClose" Grid.Row="0" Grid.Column="1"
|
||||
Width="22" Height="22" Padding="0" FontSize="12"
|
||||
Content="✕" ToolTip.Tip="Close (Esc)"
|
||||
Background="Transparent" BorderThickness="0"/>
|
||||
|
||||
<!-- Row 1: large avatar (photo or initials) next to display name + UPN -->
|
||||
<Grid Grid.Row="1" Grid.ColumnSpan="2" Margin="5,8,5,8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border x:Name="bigAvatar" Grid.Column="0" Width="60" Height="60" CornerRadius="30" Margin="0,0,12,0"/>
|
||||
<StackPanel Grid.Column="1" VerticalAlignment="Center">
|
||||
<TextBlock x:Name="txtUsername" FontSize="20" FontWeight="Bold" TextTrimming="CharacterEllipsis"/>
|
||||
<TextBlock x:Name="txtLogonName" TextTrimming="CharacterEllipsis"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="2" Grid.ColumnSpan="2" Margin="5,0,5,0">
|
||||
<TextBlock x:Name="txtAuthMethod" FontStyle="Italic" Foreground="#888" IsVisible="False"/>
|
||||
<TextBlock x:Name="txtAuthExpiry" FontStyle="Italic" Foreground="#888" IsVisible="False"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Row 3: app info. Populated by Show-ProfilePopup from the active
|
||||
provider's GetUserInfo() (AppName / AppId). Hidden when no app info. -->
|
||||
<StackPanel x:Name="pnlAppInfo" Grid.Row="3" Grid.ColumnSpan="2" Margin="5,8,5,0" IsVisible="False">
|
||||
<TextBlock Text="Application:"/>
|
||||
<TextBlock x:Name="txtAppName"/>
|
||||
<TextBlock x:Name="txtAppId" Foreground="#888" FontSize="11"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Row 4: Request Consent. Visible only when the active provider is
|
||||
MSAL and the current login isn't an app-token. Click triggers
|
||||
Start-MSALConsentPrompt to request any missing scopes. -->
|
||||
<Button x:Name="lnkRequestConsent" Grid.Row="4" Grid.ColumnSpan="2"
|
||||
Margin="5,8,5,0" HorizontalAlignment="Left"
|
||||
Content="Request Consent" IsVisible="False"
|
||||
ToolTip.Tip="Request consent for any missing scopes from Entra"/>
|
||||
|
||||
<!-- Row 5: token inspectors (diagnostic). Left-aligned; capability
|
||||
gating happens in Show-ProfilePopup (Id Token disabled for
|
||||
non-MSAL providers, etc.). -->
|
||||
<StackPanel Grid.Row="5" Grid.ColumnSpan="2" Orientation="Horizontal"
|
||||
HorizontalAlignment="Left" Margin="5,10,5,0">
|
||||
<Button x:Name="lnkTokeninfo" Content="Session Info" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Show provider session details (MSAL AuthenticationResult / MgGraph context)"/>
|
||||
<Button x:Name="lnkAccessTokenInfo" Content="Access Token" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Decode and inspect the access token JWT"/>
|
||||
<Button x:Name="lnkIdTokenInfo" Content="Id Token" Margin="0,0,5,0"
|
||||
ToolTip.Tip="Decode and inspect the ID token JWT (MSAL provider only)"/>
|
||||
<Button x:Name="lnkEffectivePermissions" Content="Permissions" Margin="0,0,5,0"
|
||||
ToolTip.Tip="What this sign-in can do per policy type: token scopes combined with the user's Intune role"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="6" Grid.ColumnSpan="2" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="5,10,5,0">
|
||||
<Button x:Name="lnkRefresh" Content="Refresh" Margin="0,0,8,0"/>
|
||||
<Button x:Name="lnkLogout" Content="Sign out"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Row 7: cached accounts (other signed-in MSAL identities). Populated
|
||||
imperatively in Show-ProfilePopup; rows built by Add-CachedUser
|
||||
(login button + forget bin). MaxHeight caps growth when many
|
||||
accounts are cached. -->
|
||||
<ScrollViewer Grid.Row="7" Grid.ColumnSpan="2" MaxHeight="200" Margin="0,5,0,0"
|
||||
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
|
||||
<StackPanel x:Name="grdCachedAccounts" Margin="5,0,5,0"/>
|
||||
</ScrollViewer>
|
||||
|
||||
<!-- Row 8: footer rows for "Sign in with a different account" /
|
||||
"Sign in to a different cloud..." appended by Show-ProfilePopup. -->
|
||||
<StackPanel x:Name="grdLoginAccount" Grid.Row="8" Grid.ColumnSpan="2" Margin="5,0,5,0"/>
|
||||
|
||||
<!-- Row 9: tenant accounts. Populated imperatively in Show-ProfilePopup
|
||||
only when $script:AccessibleTenants has >1 entry (set by the MSAL
|
||||
flow when the GetTenantList setting is enabled). Wrapped in a
|
||||
ScrollViewer with MaxHeight=200 so many tenants don't push the
|
||||
popup beyond the window. -->
|
||||
<ScrollViewer Grid.Row="9" Grid.ColumnSpan="2" MaxHeight="200" Margin="0,5,0,0"
|
||||
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
|
||||
<StackPanel x:Name="grdTenantAccounts" Margin="5,0,5,0"/>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</Border>
|
||||
@@ -0,0 +1,40 @@
|
||||
<Border xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" Padding="5"
|
||||
Background="{DynamicResource WindowBackgroundColor}">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/SettingsForm.xaml. WPF used
|
||||
Grid.IsSharedSizeScope to keep the label/control columns aligned across
|
||||
rows; Avalonia has no equivalent so we lean on column "Auto" + "*"
|
||||
natural sizing. Visually equivalent for the current setting count.
|
||||
-->
|
||||
|
||||
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
Background="{DynamicResource WindowBackgroundColor}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Auto"
|
||||
Padding="0,0,5,0">
|
||||
<Grid x:Name="spSettings"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
Margin="0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
|
||||
<StackPanel Grid.Row="1" HorizontalAlignment="Right" Orientation="Horizontal" Margin="0,5,0,5">
|
||||
<Button x:Name="btnExport" Width="100" Content="Export"/>
|
||||
<Button x:Name="btnSave" Width="100" Margin="15,0,0,0" Content="Save"/>
|
||||
<Button x:Name="btnClose" Width="100" Margin="15,0,0,0" Content="Close"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
@@ -0,0 +1,65 @@
|
||||
<Grid xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
|
||||
<!--
|
||||
Avalonia port of UI/WPF/XAML/Welcome.xaml. Translation notes:
|
||||
- WPF <Hyperlink> isn't an Avalonia inline; the two GitHub / License
|
||||
links are real <Button> elements named so Show-WelcomeDialog can wire
|
||||
their Click to launch the URL. Inline placement uses InlineUIContainer.
|
||||
- <Bold> exists in Avalonia.Controls.Documents — kept as-is.
|
||||
- <LineBreak/> also exists — kept.
|
||||
- Window-level Width/Height bindings to ScrollViewer.Viewport* (the WPF
|
||||
trick to make the TextBlock soak up the scroll viewer's size) are
|
||||
unnecessary; Avalonia's ScrollViewer measures the child naturally.
|
||||
-->
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<ScrollViewer x:Name="scrollViewerObj"
|
||||
HorizontalScrollBarVisibility="Auto"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
Margin="5">
|
||||
<TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
MinWidth="700" MinHeight="390"
|
||||
TextWrapping="Wrap">
|
||||
<Bold>Welcome!</Bold>
|
||||
<LineBreak/><LineBreak/>
|
||||
This software uses public APIs (e.g. Microsoft Graph etc.) to manage and view objects.
|
||||
<LineBreak/>
|
||||
It uses the BETA version of Microsoft Graph so some functionality might change or break.
|
||||
<LineBreak/><LineBreak/>
|
||||
Please report any issues to the GitHub repository.
|
||||
<LineBreak/>
|
||||
This is developed outside work hours so please respect that any support is based on best effort.
|
||||
<LineBreak/><LineBreak/>
|
||||
See <InlineUIContainer><Button x:Name="gitHubLink" Classes="link" Content="GitHub"/></InlineUIContainer> repository for documentation, issue tracking etc.
|
||||
<LineBreak/><LineBreak/>
|
||||
This software has <Bold>NO</Bold> association with Microsoft.
|
||||
<LineBreak/><LineBreak/>
|
||||
This software is provided AS IS and it is licensed under the MIT license. See <InlineUIContainer><Button x:Name="licenseLink" Classes="link" Content="LicenseInfo"/></InlineUIContainer> for more information.
|
||||
<LineBreak/><LineBreak/>
|
||||
<Bold>Note:</Bold>
|
||||
<LineBreak/>
|
||||
The 'Microsoft Intune PowerShell' Enterprise App in Azure is used by default for API calls.
|
||||
<LineBreak/>
|
||||
Go to Settings if you want to use 'Microsoft Graph PowerShell' or a custom App.
|
||||
<LineBreak/>
|
||||
This software might use permissions not granted for the existing App.
|
||||
<LineBreak/>
|
||||
A grant request will be displayed if permissions are missing.
|
||||
<LineBreak/>
|
||||
Enable 'Use Default Permissions' in Settings to only use existing App permissions. Some objects might not be supported.
|
||||
</TextBlock>
|
||||
</ScrollViewer>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,5">
|
||||
<CheckBox x:Name="chkAcceptConditions" VerticalAlignment="Center"
|
||||
IsChecked="False" Margin="5,0,0,0" Content="Accept conditions"/>
|
||||
<Button x:Name="btnAcceptConditions" Content="OK" IsEnabled="False"
|
||||
Width="100" Margin="5,0,0,0"/>
|
||||
<Button x:Name="btnCancel" Content="Cancel" Width="100" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
Reference in New Issue
Block a user