Added more settings.

This commit is contained in:
Robin 2018-04-15 21:30:58 +02:00
commit d6313ed956
14 changed files with 387 additions and 73 deletions

View file

@ -214,6 +214,10 @@ namespace Greenshot.Addons.Core
[Description("Comma separated list of destinations which should be disabled.")]
IList<string> ExcludeDestinations { get; set; }
[Description("Should Greenshot check for updates?")]
[DefaultValue(true)]
bool CheckForUpdates { get; set; }
[Description("How many days between every update check? (0=no checks)")]
[DefaultValue(14)]
int UpdateCheckInterval { get; set; }

View file

@ -0,0 +1,49 @@
#region Greenshot GNU General License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General License as published by
// the Free Software Foundation, either version 1 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General License for more details.
//
// You should have received a copy of the GNU General License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#endregion
#region Usings
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using Dapplo.HttpExtensions;
using Dapplo.Ini;
using Dapplo.InterfaceImpl.Extensions;
using Dapplo.Windows.Common.Structs;
using Greenshot.Addons.Core.Enums;
using Greenshot.Addons.Interfaces;
#endregion
namespace Greenshot.Addons.Core
{
/// <summary>
/// Network (HTTP) configuration.
/// </summary>
[IniSection("Network")]
[Description("Greenshot network configuration")]
public interface INetworkConfiguration : IIniSection, IHttpSettings, INotifyPropertyChanged, IWriteProtectProperties, IDefaultValue, ITransactionalProperties
{
}
}

View file

@ -210,6 +210,7 @@
<Compile Include="Core\ExplorerHelper.cs" />
<Compile Include="Core\Enums\OutputFormats.cs" />
<Compile Include="Core\Enums\WindowCaptureModes.cs" />
<Compile Include="Core\INetworkConfiguration.cs" />
<Compile Include="Core\IDestinationFileConfiguration.cs" />
<Compile Include="Core\ImageOutput.cs" />
<Compile Include="Core\InteropWindowExtensions.cs" />

View file

@ -42,11 +42,12 @@ namespace Greenshot.Addons.ViewModels
private bool _useOwnSettings;
[Import]
public ICoreConfiguration FileConfiguration { get; set; }
public ICoreConfiguration CoreConfiguration { get; set; }
[Import]
public IGreenshotLanguage GreenshotLanguage { get; set; }
/// <summary>
/// A NPC wrapper for the UseOwnSettings in the IDestinationFileConfiguration, as this doesn't work when ITransactionalProperties is used
/// </summary>
@ -62,9 +63,18 @@ namespace Greenshot.Addons.ViewModels
_destinationFileConfiguration.UseOwnSettings = value;
}
NotifyOfPropertyChange();
NotifyOfPropertyChange(nameof(AreSettingsEnabled));
NotifyOfPropertyChange(nameof(FileConfiguration));
NotifyOfPropertyChange(nameof(SelectedFormat));
NotifyOfPropertyChange(nameof(JpegSettingsVisibility));
}
}
public IFileConfiguration FileConfiguration =>
DestinationFileConfiguration?.UseOwnSettings == true
? (IFileConfiguration)DestinationFileConfiguration
: CoreConfiguration;
/// <summary>
/// This needs to be set with the IDestinationFileConfiguration to have make local configuration for a destination possible
/// </summary>
@ -73,10 +83,13 @@ namespace Greenshot.Addons.ViewModels
get => _destinationFileConfiguration;
set
{
if (Equals(value, _destinationFileConfiguration)) return;
if (Equals(value, _destinationFileConfiguration))
{
return;
}
_destinationFileConfiguration = value;
NotifyOfPropertyChange(nameof(DestinationFileConfigurationVisiblity));
NotifyOfPropertyChange(nameof(AreGlobalSettingsEnabled));
NotifyOfPropertyChange(nameof(AreSettingsEnabled));
NotifyOfPropertyChange(nameof(FileConfiguration));
NotifyOfPropertyChange(nameof(OwnSettingsVisibility));
}
}
@ -84,23 +97,13 @@ namespace Greenshot.Addons.ViewModels
/// <summary>
/// Specifies if the global settings can be modified, which is the case when there are is no DestinationFileConfiguration
/// </summary>
public bool AreGlobalSettingsEnabled => DestinationFileConfiguration == null;
public bool AreSettingsEnabled => DestinationFileConfiguration == null || DestinationFileConfiguration.UseOwnSettings;
/// <summary>
/// If there is a DestinationFileConfiguration, the checkbox is shown
/// </summary>
public Visibility OwnSettingsVisibility => DestinationFileConfiguration != null? Visibility.Visible : Visibility.Collapsed;
/// <summary>
/// If there is a DestinationFileConfiguration and use own settings is set the configuration is shown
/// </summary>
public Visibility DestinationFileConfigurationVisiblity => DestinationFileConfiguration != null && _useOwnSettings ? Visibility.Visible : Visibility.Collapsed;
/// <summary>
/// If there is a DestinationFileConfiguration, the global configuration is not shown
/// </summary>
public Visibility GlobalFileConfigurationVisiblity => AreGlobalSettingsEnabled || !_useOwnSettings ? Visibility.Visible : Visibility.Collapsed;
/// <summary>
/// The globally selected format
/// </summary>
@ -111,33 +114,14 @@ namespace Greenshot.Addons.ViewModels
{
FileConfiguration.OutputFileFormat = value;
NotifyOfPropertyChange();
NotifyOfPropertyChange(nameof(GlobalJpegSettingsVisibility));
NotifyOfPropertyChange(nameof(JpegSettingsVisibility));
}
}
/// <summary>
/// The global jpeg quality settings visibility
/// </summary>
public Visibility GlobalJpegSettingsVisibility => SelectedFormat == OutputFormats.jpg ? Visibility.Visible : Visibility.Collapsed;
/// <summary>
/// The locally selected format
/// </summary>
public OutputFormats DestinationSelectedFormat
{
get => DestinationFileConfiguration.OutputFileFormat;
set
{
DestinationFileConfiguration.OutputFileFormat = value;
NotifyOfPropertyChange();
NotifyOfPropertyChange(nameof(DestinationJpegSettingsVisibility));
}
}
/// <summary>
/// The global jpeg quality settings visibility
/// </summary>
public Visibility DestinationJpegSettingsVisibility => DestinationSelectedFormat == OutputFormats.jpg ? Visibility.Visible : Visibility.Collapsed;
public Visibility JpegSettingsVisibility => SelectedFormat == OutputFormats.jpg ? Visibility.Visible : Visibility.Collapsed;
/// <summary>
/// The formats available, with their translation

View file

@ -11,25 +11,22 @@
<StackPanel Visibility="{Binding OwnSettingsVisibility}">
<CheckBox Content="Use destination settings" IsChecked="{Binding UseOwnSettings}" />
</StackPanel>
<StackPanel Visibility="{Binding DestinationFileConfigurationVisiblity}" IsEnabled="{Binding UseOwnSettings}">
<DockPanel LastChildFill="True">
<Label Content="{Binding GreenshotLanguage.SettingsPrimaryimageformat}" Width="100" />
<ComboBox SelectedValue="{Binding DestinationSelectedFormat}" ItemsSource="{Binding Formats}" SelectedValuePath="Key" DisplayMemberPath="Value" />
</DockPanel>
<DockPanel LastChildFill="True" Visibility="{Binding DestinationJpegSettingsVisibility}">
<Label Content="{Binding GreenshotLanguage.SettingsJpegquality}" Width="100" />
<Slider Maximum="100" Value="{Binding DestinationFileConfiguration.OutputFileJpegQuality}"/>
</DockPanel>
</StackPanel>
<StackPanel IsEnabled="{Binding AreGlobalSettingsEnabled}" Visibility="{Binding GlobalFileConfigurationVisiblity}">
<StackPanel IsEnabled="{Binding AreSettingsEnabled}">
<DockPanel LastChildFill="True">
<Label Content="{Binding GreenshotLanguage.SettingsPrimaryimageformat}" Width="100" />
<ComboBox SelectedValue="{Binding SelectedFormat}" ItemsSource="{Binding Formats}" SelectedValuePath="Key" DisplayMemberPath="Value" />
</DockPanel>
<DockPanel LastChildFill="True" Visibility="{Binding GlobalJpegSettingsVisibility}">
<DockPanel LastChildFill="True" Visibility="{Binding JpegSettingsVisibility}">
<Label Content="{Binding GreenshotLanguage.SettingsJpegquality}" Width="100" />
<Slider Maximum="100" Value="{Binding FileConfiguration.OutputFileJpegQuality}"/>
</DockPanel>
<CheckBox Content="{Binding GreenshotLanguage.SettingsReducecolors}" IsChecked="{Binding FileConfiguration.OutputFileReduceColors}"/>
<DockPanel LastChildFill="True">
<Label Content="{Binding GreenshotLanguage.SettingsFilenamepattern}" Width="100" />
<TextBox Text="{Binding FileConfiguration.OutputFileFilenamePattern}"/>
</DockPanel>
</StackPanel>
</StackPanel>
</UserControl>

View file

@ -265,6 +265,9 @@
<DependentUpon>BugReportForm.cs</DependentUpon>
</Compile>
<Compile Include="Startup.cs" />
<Compile Include="Ui\Configuration\ViewModels\OutputConfigViewModel.cs" />
<Compile Include="Ui\Configuration\ViewModels\NetworkConfigViewModel.cs" />
<Compile Include="Ui\Configuration\ViewModels\GeneralConfigViewModel.cs" />
<Compile Include="Ui\Configuration\ViewModels\DestinationPickerConfigViewModel.cs" />
<Compile Include="Ui\Configuration\ViewModels\DestinationsConfigNodeViewModel.cs" />
<Compile Include="Ui\Configuration\ViewModels\CaptureConfigNodeViewModel.cs" />
@ -489,6 +492,18 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Ui\Configuration\Views\OutputConfigView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Ui\Configuration\Views\NetworkConfigView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Ui\Configuration\Views\GeneralConfigView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Ui\Configuration\Views\UiConfigView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>

View file

@ -21,14 +21,11 @@
#endregion
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.Composition;
using System.Reactive.Disposables;
using Dapplo.CaliburnMicro.Configuration;
using Dapplo.CaliburnMicro.Extensions;
using Dapplo.CaliburnMicro.Metro;
using Greenshot.Addons;
using Greenshot.Addons.Core;
using Greenshot.Addons.Core.Enums;
@ -46,16 +43,6 @@ namespace Greenshot.Ui.Configuration.ViewModels
/// </summary>
private CompositeDisposable _disposables;
/// <summary>
/// The avaible theme accents
/// </summary>
public ObservableCollection<Tuple<ThemeAccents, string>> AvailableThemeAccents { get; set; } = new ObservableCollection<Tuple<ThemeAccents, string>>();
/// <summary>
/// The avaible themes
/// </summary>
public ObservableCollection<Tuple<Themes, string>> AvailableThemes { get; set; } = new ObservableCollection<Tuple<Themes, string>>();
[Import]
public ICoreConfiguration CoreConfiguration { get; set; }
@ -69,7 +56,6 @@ namespace Greenshot.Ui.Configuration.ViewModels
{
// Prepare disposables
_disposables?.Dispose();
_disposables = new CompositeDisposable();
// Place this under the Ui parent
ParentId = nameof(ConfigIds.Capture);
@ -78,10 +64,10 @@ namespace Greenshot.Ui.Configuration.ViewModels
config.Register(CoreConfiguration);
// automatically update the DisplayName
var greenshotLanguageBinding = GreenshotLanguage.CreateDisplayNameBinding(this, nameof(IGreenshotLanguage.SettingsCapture));
// Make sure the greenshotLanguageBinding is disposed when this is no longer active
_disposables.Add(greenshotLanguageBinding);
_disposables = new CompositeDisposable
{
GreenshotLanguage.CreateDisplayNameBinding(this, nameof(IGreenshotLanguage.SettingsCapture))
};
base.Initialize(config);
}

View file

@ -0,0 +1,74 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 1 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System.ComponentModel.Composition;
using System.Reactive.Disposables;
using Dapplo.CaliburnMicro.Configuration;
using Dapplo.CaliburnMicro.Extensions;
using Greenshot.Addons;
using Greenshot.Addons.Core;
using Greenshot.Configuration;
namespace Greenshot.Ui.Configuration.ViewModels
{
[Export(typeof(IConfigScreen))]
public sealed class GeneralConfigViewModel : SimpleConfigScreen
{
/// <summary>
/// Here all disposables are registered, so we can clean the up
/// </summary>
private CompositeDisposable _disposables;
[Import]
public ICoreConfiguration CoreConfiguration { get; set; }
[Import]
public IConfigTranslations ConfigTranslations { get; set; }
[Import]
public IGreenshotLanguage GreenshotLanguage { get; set; }
public override void Initialize(IConfig config)
{
// Prepare disposables
_disposables?.Dispose();
// Make sure Commit/Rollback is called on the IUiConfiguration
config.Register(CoreConfiguration);
// automatically update the DisplayName
_disposables = new CompositeDisposable
{
GreenshotLanguage.CreateDisplayNameBinding(this, nameof(IGreenshotLanguage.SettingsGeneral))
};
base.Initialize(config);
}
protected override void OnDeactivate(bool close)
{
_disposables.Dispose();
base.OnDeactivate(close);
}
}
}

View file

@ -0,0 +1,71 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 1 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System.ComponentModel.Composition;
using System.Reactive.Disposables;
using Dapplo.CaliburnMicro.Configuration;
using Dapplo.CaliburnMicro.Extensions;
using Greenshot.Addons;
using Greenshot.Addons.Core;
namespace Greenshot.Ui.Configuration.ViewModels
{
[Export(typeof(IConfigScreen))]
public sealed class NetworkConfigViewModel : SimpleConfigScreen
{
/// <summary>
/// Here all disposables are registered, so we can clean the up
/// </summary>
private CompositeDisposable _disposables;
[Import]
public INetworkConfiguration NetworkConfiguration { get; set; }
[Import]
public IGreenshotLanguage GreenshotLanguage { get; set; }
public override void Initialize(IConfig config)
{
// Prepare disposables
_disposables?.Dispose();
// Make sure Commit/Rollback is called on the IUiConfiguration
config.Register(NetworkConfiguration);
// automatically update the DisplayName
_disposables = new CompositeDisposable
{
GreenshotLanguage.CreateDisplayNameBinding(this, nameof(IGreenshotLanguage.SettingsNetwork))
};
base.Initialize(config);
}
protected override void OnDeactivate(bool close)
{
_disposables.Dispose();
base.OnDeactivate(close);
}
}
}

View file

@ -0,0 +1,78 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 1 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System.ComponentModel.Composition;
using System.Reactive.Disposables;
using Dapplo.CaliburnMicro.Configuration;
using Dapplo.CaliburnMicro.Extensions;
using Greenshot.Addons;
using Greenshot.Addons.Core;
using Greenshot.Addons.ViewModels;
using Greenshot.Configuration;
namespace Greenshot.Ui.Configuration.ViewModels
{
[Export(typeof(IConfigScreen))]
public sealed class OutputConfigViewModel : SimpleConfigScreen
{
/// <summary>
/// Here all disposables are registered, so we can clean the up
/// </summary>
private CompositeDisposable _disposables;
[Import]
public ICoreConfiguration CoreConfiguration { get; set; }
[Import]
public IConfigTranslations ConfigTranslations { get; set; }
[Import]
public IGreenshotLanguage GreenshotLanguage { get; set; }
[Import]
public FileConfigPartViewModel FileConfigPartViewModel { get; set; }
public override void Initialize(IConfig config)
{
// Prepare disposables
_disposables?.Dispose();
// Make sure Commit/Rollback is called on the IUiConfiguration
config.Register(CoreConfiguration);
// automatically update the DisplayName
_disposables = new CompositeDisposable
{
GreenshotLanguage.CreateDisplayNameBinding(this, nameof(IGreenshotLanguage.SettingsOutput))
};
base.Initialize(config);
}
protected override void OnDeactivate(bool close)
{
_disposables.Dispose();
base.OnDeactivate(close);
}
}
}

View file

@ -100,7 +100,6 @@ namespace Greenshot.Ui.Configuration.ViewModels
{
// Prepare disposables
_disposables?.Dispose();
_disposables = new CompositeDisposable();
AvailableThemeAccents.Clear();
foreach (var themeAccent in Enum.GetValues(typeof(ThemeAccents)).Cast<ThemeAccents>())
@ -123,10 +122,10 @@ namespace Greenshot.Ui.Configuration.ViewModels
config.Register(MetroConfiguration);
// automatically update the DisplayName
var greenshotLanguageBinding = GreenshotLanguage.CreateDisplayNameBinding(this, nameof(IGreenshotLanguage.SettingsTitle));
// Make sure the greenshotLanguageBinding is disposed when this is no longer active
_disposables.Add(greenshotLanguageBinding);
_disposables = new CompositeDisposable
{
GreenshotLanguage.CreateDisplayNameBinding(this, nameof(IGreenshotLanguage.SettingsTitle))
};
base.Initialize(config);
}

View file

@ -0,0 +1,17 @@
<UserControl x:Class="Greenshot.Ui.Configuration.Views.GeneralConfigView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Greenshot.Ui.Configuration.ViewModels"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance viewModels:GeneralConfigViewModel,IsDesignTimeCreatable=False}"
>
<StackPanel>
<CheckBox Content="{Binding GreenshotLanguage.SettingsCheckperiod}" IsChecked="{Binding CoreConfiguration.CheckForUpdates}"></CheckBox>
<DockPanel LastChildFill="True">
<Label Content="{Binding GreenshotLanguage.SettingsCheckperiod}" Width="100" />
<TextBox Text="{Binding CoreConfiguration.UpdateCheckInterval}"/>
</DockPanel>
</StackPanel>
</UserControl>

View file

@ -0,0 +1,26 @@
<UserControl x:Class="Greenshot.Ui.Configuration.Views.NetworkConfigView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Greenshot.Ui.Configuration.ViewModels"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance viewModels:NetworkConfigViewModel,IsDesignTimeCreatable=False}"
>
<StackPanel>
<CheckBox Content="Allow auto redirect" IsChecked="{Binding NetworkConfiguration.AllowAutoRedirect}" />
<CheckBox Content="Allow pipelining" IsChecked="{Binding NetworkConfiguration.AllowPipelining}" />
<CheckBox Content="Ignore SSL certificate errors" IsChecked="{Binding NetworkConfiguration.IgnoreSslCertificateErrors}" />
<CheckBox Content="Pre authenticate" IsChecked="{Binding NetworkConfiguration.PreAuthenticate}" />
<CheckBox Content="Expect 100 continue" IsChecked="{Binding NetworkConfiguration.Expect100Continue}" />
<CheckBox Content="Use cookies" IsChecked="{Binding NetworkConfiguration.UseCookies}" />
<CheckBox Content="Use default credentials" IsChecked="{Binding NetworkConfiguration.UseDefaultCredentials}" />
<CheckBox Content="Use default proxy" IsChecked="{Binding NetworkConfiguration.UseDefaultProxy}" />
<CheckBox Content="Use proxy" IsChecked="{Binding NetworkConfiguration.UseProxy}" />
<CheckBox Content="Use default credentials for proxy" IsChecked="{Binding NetworkConfiguration.UseDefaultCredentialsForProxy}" />
<DockPanel LastChildFill="True">
<Label Content="DefaultUseAgent" Width="100" />
<TextBox Text="{Binding NetworkConfiguration.DefaultUserAgent}"></TextBox>
</DockPanel>
</StackPanel>
</UserControl>

View file

@ -0,0 +1,13 @@
<UserControl x:Class="Greenshot.Ui.Configuration.Views.OutputConfigView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Greenshot.Ui.Configuration.ViewModels"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance viewModels:OutputConfigViewModel,IsDesignTimeCreatable=False}"
>
<StackPanel>
<ContentControl x:Name="FileConfigPartViewModel"/>
</StackPanel>
</UserControl>