VS2015 does not manage user window in design mode (works in VS2013)

I have a program that uses a custom window control. In VS2013, the window perfectly displays the appearance in the design, the exact same solution opened in VS2015 does not work. Compiles and works great at runtime.

enter image description here

enter image description here

The following are snippets of the corresponding code:

<control:CustomWindow x:Class="CategoryView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:control="clr-namespace:ClassAccounts;assembly=ClassAccounts"
    xmlns:l="clr-namespace:WpfAccounts"
    Title="Category" Width="470" Height="485" WindowStartupLocation="CenterScreen" OKVisibility="True">

<Window.Resources>

    <CollectionViewSource Source="{Binding Categories}" x:Key="Categories"/>
    <CollectionViewSource Source="{Binding Headings}" x:Key="Headings"/>

    <DataTemplate x:Key="CategoryTemplate">
        <TextBlock Text="{Binding comment}" Margin="0" Foreground="{Binding forecolor}"/>
    </DataTemplate>
</Window.Resources>

<Grid>
    ...
</Grid>

Application.xaml

<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:WpfAccounts"
StartupUri="MainWindow.xaml">

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/ClassAccounts;component/Themes/Generic.xaml"/>
        </ResourceDictionary.MergedDictionaries>

        <!-- Region SubMenu -->
        <MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverter"/>

        <!-- Separator -->
        <Style TargetType="{x:Type Separator}" x:Key="SeparatorStyle">
            <Setter Property="Height" Value="1"/>
            <Setter Property="Background" Value="{StaticResource CustomDarkBlue}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Separator}">
                        <Rectangle Height="{TemplateBinding Height}" Fill="{StaticResource CustomWhite}"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    ...

        <!-- End Region -->
    </ResourceDictionary>
</Application.Resources>

Assemblyinfo.vb

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
Imports System.Globalization
Imports System.Resources
Imports System.Windows

' General Information about an assembly is controlled through the following 
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("Accounts")> 
<Assembly: AssemblyDescription("Account Program")> 
<Assembly: AssemblyCompany("")> 
<Assembly: AssemblyProduct("Accounts")> 
<Assembly: AssemblyCopyRight("Copyright ©  2013-4 Andrew Powell")> 
<Assembly: AssemblyTrademark("")> 
<Assembly: ComVisible(False)>

'In order to begin building localizable applications, set 
'<UICulture>CultureYouAreCodingWith</UICulture> in your .vbproj file
'inside a <PropertyGroup>.  For example, if you are using US english 
'in your source files, set the <UICulture> to "en-US".  Then uncomment the
'NeutralResourceLanguage attribute below.  Update the "en-US" in the line
'below to match the UICulture setting in the project file.

'<Assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)> 


'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found.
'1st parameter: where theme specific resource dictionaries are located
'(used if a resource is not found in the page, 
' or application resource dictionaries)

'2nd parameter: where the generic resource dictionary is located
'(used if a resource is not found in the page, 
'app, and any theme specific resource dictionaries)
<Assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)> 



'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("c7920515-ec57-40d4-bccb-8f5b16be77d0")> 

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 

Generic.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:ClassAccounts">

<!-- Region Colours -->

<!-- Control colors -->
<SolidColorBrush x:Key="CustomWhite" Color="White"/>
<SolidColorBrush x:Key="CustomDarkBlue" Color="#8DA3C1"/>
<SolidColorBrush x:Key="CustomGray" Color="LightGray"/>
<SolidColorBrush x:Key="CustomDarkHighlight" Color="#5082A4"/>
<!-- Submenu item highlight -->
<SolidColorBrush x:Key="CustomLightHighlight" Color="#3399FF"/>
<!-- TreeviewItem highlight -->
<Color x:Key="CustomLightHighlightC" A="#FF" R="#33" G="#99" B="#FF"/>
<SolidColorBrush x:Key="CustomBackground" Color="#B5CBEF"/>
<Color x:Key="CustomBackgroundC" A="#FF" R="#B5" G="#CB" B="#EF"/>
<SolidColorBrush x:Key="CustomHighlightedControlGlyph" Color="#3C7FB1"/>
<SolidColorBrush x:Key="CustomHighlightedControlBorder" Color="#222"/>
<SolidColorBrush x:Key="CustomPressedControlGlyph" Color="#003366"/>
<SolidColorBrush x:Key="CustomPressedControlBorder" Color="#526C7B"/>
<SolidColorBrush x:Key="CustomPressedControlBackground" Color="#595959"/>
<SolidColorBrush x:Key="CustomGlyph" Color="#444"/>

<!-- Window Colors -->
<SolidColorBrush x:Key="CustomWindowBorder" Color="#395984"/>
<SolidColorBrush x:Key="CustomHeaderLight" Color="#E7EBF7"/>
<Color x:Key="CustomHeaderLightC" A="#FF" R="#E7" G="#EB" B="#F7"/>
<SolidColorBrush x:Key="CustomHeaderDark" Color="#CEE3FF"/>
<Color x:Key="CustomHeaderDarkC" A="#FF" R="#CE" G="#E3" B="#FF"/>
<SolidColorBrush x:Key="CustomControl" Color="Gray"/>

<!-- End Region -->

<!-- Region Window -->

<!-- Window Button style -->
<Style TargetType="{x:Type Button}" x:Key="WindowButtonStyle">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="FontFamily" Value="Webdings"/>
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="Foreground" Value="{StaticResource CustomControl}"/>
    <Setter Property="Margin" Value="0"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Top"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ButtonBase}">
                <Border x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Margin="0" Padding="0" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                    <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Foreground" Value="Black"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="LightGray"/>
        </Trigger>
    </Style.Triggers>
</Style>

<!-- Window style -->
<Style TargetType="{x:Type local:CustomWindow}" x:Key="{x:Type local:CustomWindow}">
    <Setter Property="WindowStyle" Value="None"/>
    <Setter Property="ResizeMode" Value="NoResize"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="AllowsTransparency" Value="True"/>
    <Setter Property="ShowInTaskbar" Value="True"/>
    <Setter Property="Icon" Value="\coins.ico"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomWindow}">
                <Border Width="Auto" Height="Auto" Name="windowFrame" BorderBrush="{StaticResource CustomWindowBorder}" BorderThickness="1" CornerRadius="0,20,20,20">
                    <Border.Background>
                        <LinearGradientBrush>
                            <GradientBrush.GradientStops>
                                <GradientStopCollection>
                                    <GradientStop Color="{StaticResource CustomHeaderLightC}" Offset="0.0"></GradientStop>
                                    <GradientStop Color="{StaticResource CustomHeaderDarkC}" Offset="0.25"></GradientStop>
                                </GradientStopCollection>
                            </GradientBrush.GradientStops>
                        </LinearGradientBrush>
                    </Border.Background>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <Grid Grid.Row="0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="100"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" x:Name="tbTitle" Text="{TemplateBinding Title}" FontSize="14" Margin="0" Padding="4"/>
                            <StackPanel Grid.Column="1" Orientation="Horizontal" Margin="0,5,15,0" HorizontalAlignment="Right" VerticalAlignment="Top" Background="Transparent">
                                <Button x:Name="RefreshButton" Content="q" Style="{StaticResource WindowButtonStyle}"/>
                                <Button x:Name="MinimizeButton" Content="0" Style="{StaticResource WindowButtonStyle}"/>
                                <Button x:Name="OKButton" Content="a" Style="{StaticResource WindowButtonStyle}" IsDefault="True"/>
                                <Button x:Name="CloseButton" Content="r" Style="{StaticResource WindowButtonStyle}" IsCancel="True"/>
                            </StackPanel>
                        </Grid>
                        <Grid x:Name="grdMain" Grid.Row="1" Background="{StaticResource CustomBackground}">
                            <AdornerDecorator>
                                <ContentPresenter/>
                            </AdornerDecorator>
                        </Grid>
                        <Grid Grid.Row="2">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="15,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top">
                                <TextBlock x:Name="tbStatusLeft" FontSize="14" Margin="0,0,0,0" Width="150" Padding="2"/>
                                <TextBlock x:Name="tbStatusLeft2" FontSize="14" Margin="0,0,0,0" Width="150" Padding="2"/>
                                <TextBlock x:Name="tbStatusLeft3" FontSize="14" Margin="0,0,0,0" Width="150" Padding="2"/>
                            </StackPanel>
                            <Canvas x:Name="canStatusMiddle" Grid.Column="1" ClipToBounds="True">
                                <TextBlock x:Name="tbStatusMiddle" FontSize="14" Margin="0,0,0,0" Padding="2" TextAlignment="Center"/>
                            </Canvas>
                            <StackPanel Grid.Column="2" Orientation="Horizontal" Margin="0,0,15,0" HorizontalAlignment="Right" VerticalAlignment="Top">
                                <TextBlock x:Name="tbStatusRight3" FontSize="14" Margin="0,0,0,0" Width="150" Padding="2" TextAlignment="Right"/>
                                <TextBlock x:Name="tbStatusRight2" FontSize="14" Margin="0,0,0,0" Width="150" Padding="2" TextAlignment="Right"/>
                                <TextBlock x:Name="tbStatusRight" FontSize="14" Margin="0,0,0,0" Width="150" Padding="2" TextAlignment="Right"/>
                            </StackPanel>
                        </Grid>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="OKVisibility" Value="False">
                        <Setter TargetName="OKButton" Property="Visibility" Value="Collapsed"/>
                    </Trigger>
                    <Trigger Property="RefreshVisibility" Value="False">
                        <Setter TargetName="RefreshButton" Property="Visibility" Value="Collapsed"/>
                    </Trigger>

                    <Trigger Property="ExtraStatus" Value="False">
                        <Setter TargetName="tbStatusLeft2" Property="Visibility" Value="Collapsed"/>
                        <Setter TargetName="tbStatusLeft3" Property="Visibility" Value="Collapsed"/>
                        <Setter TargetName="tbStatusRight2" Property="Visibility" Value="Collapsed"/>
                        <Setter TargetName="tbStatusRight3" Property="Visibility" Value="Collapsed"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- End Region-->

Project example - https://www.sendspace.com/file/z4a4tg

Any help greatly appreciated. Andy

+4
source share
3 answers

. , , VS2013. Generic.xaml :

<Style TargetType="{x:Type local:CustomWindow}" x:Key="{x:Type local:CustomWindow}">

:

<Style TargetType="{x:Type local:CustomWindow}">

VS2013 ( VS2015). ( MSDN) x: Key , .

, TargetType TextBlock x: Key TextBlock. , x: Key {x: Type TextBlock}. , x: Key , {x: TextBlock}, TextBlock . TextBlock.

( https://msdn.microsoft.com/fr-fr/library/ms745683(v=VS.85).aspx#styling_targettype)

, -, VS2015 ( ) :

<Style TargetType="{x:Type local:CustomWindow}" x:Key="CustomWindow">

<Style="{DynamicResource CustomWindow}">

xaml . , , , VS2013, VS2015, .

. Andy

+4

- , VS2015, . , .

app.xaml:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/xxx.yyy;component/Themes/Generic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

. , . - , , /xxx.yyy;component. , .

, (, , ). .

, generic.xaml . xaml:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/xxx.yyy;component/Themes/xxxWindow.xaml" />
+1

VS 2015. Update 3 .

0

Source: https://habr.com/ru/post/1599160/


All Articles