WPF Jak dodawać kilka resourców

0

Mam następujący kod w xamlu:

<Window x:Class="MP3PlayerProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:standardControl="clr-namespace:MP3PlayerProject.StandardControl"
        xmlns:componentControl="clr-namespace:MP3PlayerProject.ComponentControl"
        xmlns:mp3PlayerProject="clr-namespace:MP3PlayerProject"
        Title="MainWindow" Height="600" Width="1000" x:Name="Window" SizeChanged="MainWindow_OnSizeChanged"  StateChanged="MainWindow_OnStateChanged" >
    <Window.Resources>
        <mp3PlayerProject:WidthAndHeightConventer x:Key="MyConventer"></mp3PlayerProject:WidthAndHeightConventer>
        <ResourceDictionary x:Key="ResourceDictionary">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ScrollBarStyle.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
... 

ScrolBarStyle.xaml:

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" x:Name="Dictionary3">
    <ControlTemplate x:Key="ScrollViewerControlTemplate" TargetType="{x:Type ScrollViewer}">
        <Grid x:Name="Grid" Background="{TemplateBinding Background}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Rectangle x:Name="Corner" Grid.Column="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.RowSpan="2" Margin="{TemplateBinding Padding}" Grid.ColumnSpan="2"/>
            <ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}" Width="8"/>
            <ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}" Height="8"/>
        </Grid>
    </ControlTemplate>
    <Style x:Key="ScrollBarPageButton" TargetType="{x:Type RepeatButton}">
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Focusable" Value="false"/>
        <Setter Property="IsTabStop" Value="false"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RepeatButton}">
                    <Rectangle Fill="{TemplateBinding Background}" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="HorizontalThumb" TargetType="{x:Type Thumb}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Thumb}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="4" />
                            <ColumnDefinition Width="4" />
                            <ColumnDefinition />
                            <ColumnDefinition Width="4" />
                            <ColumnDefinition Width="4" />
                        </Grid.ColumnDefinitions>
                        <Ellipse Grid.Column="0" Grid.ColumnSpan="2" Fill="#FFF4F4F5" />
                        <Rectangle Grid.Column="1" Grid.ColumnSpan="3" Fill="#FFF4F4F5" />
                        <Ellipse Grid.Column="3" Grid.ColumnSpan="2" Fill="#FFF4F4F5" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="VerticalThumb" TargetType="{x:Type Thumb}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Thumb}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="4" />
                            <RowDefinition Height="4" />
                            <RowDefinition />
                            <RowDefinition Height="4" />
                            <RowDefinition Height="4" />
                        </Grid.RowDefinitions>
                        <Ellipse Grid.Row="0" Grid.RowSpan="2" Fill="#FFF4F4F5" />
                        <Rectangle Grid.Row="1" Grid.RowSpan="3" Fill="#FFF4F4F5" />
                        <Ellipse Grid.Row="3" Grid.RowSpan="2" Fill="#FFF4F4F5" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type ScrollBar}">
        <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>
        <Setter Property="Stylus.IsFlicksEnabled" Value="false"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="Width" Value="10"/>
        <Setter Property="MinWidth" Value="10"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ScrollBar}">
                    <Grid x:Name="Bg" SnapsToDevicePixels="true" Background="#7FBFBFBF">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="0.00001*"/>
                        </Grid.RowDefinitions>
                        <Track x:Name="PART_Track" IsDirectionReversed="true" IsEnabled="{TemplateBinding IsMouseOver}" Grid.Row="1">
                            <Track.DecreaseRepeatButton>
                                <RepeatButton Command="{x:Static ScrollBar.PageUpCommand}" Style="{StaticResource ScrollBarPageButton}"/>
                            </Track.DecreaseRepeatButton>
                            <Track.IncreaseRepeatButton>
                                <RepeatButton Command="{x:Static ScrollBar.PageDownCommand}" Style="{StaticResource ScrollBarPageButton}"/>
                            </Track.IncreaseRepeatButton>
                            <Track.Thumb>
                                <Thumb Style="{DynamicResource VerticalThumb}" Microsoft_Windows_Themes:ScrollChrome.ScrollGlyph="VerticalGripper" Width="8"/>
                            </Track.Thumb>
                        </Track>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="Orientation" Value="Horizontal">
                <Setter Property="Width" Value="Auto"/>
                <Setter Property="MinWidth" Value="0"/>
                <Setter Property="Height" Value="10"/>
                <Setter Property="MinHeight" Value="10"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ScrollBar}">
                            <Grid x:Name="Bg" SnapsToDevicePixels="true" Background="#7FA7A7A7">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.00001*"/>
                                </Grid.ColumnDefinitions>
                                <Track x:Name="PART_Track" Grid.Column="1" IsEnabled="{TemplateBinding IsMouseOver}">
                                    <Track.DecreaseRepeatButton>
                                        <RepeatButton Command="{x:Static ScrollBar.PageLeftCommand}" Style="{StaticResource ScrollBarPageButton}"/>
                                    </Track.DecreaseRepeatButton>
                                    <Track.IncreaseRepeatButton>
                                        <RepeatButton Command="{x:Static ScrollBar.PageRightCommand}" Style="{StaticResource ScrollBarPageButton}"/>
                                    </Track.IncreaseRepeatButton>
                                    <Track.Thumb>
                                        <Thumb Microsoft_Windows_Themes:ScrollChrome.ScrollGlyph="HorizontalGripper" Style="{DynamicResource HorizontalThumb}" Height="8"/>
                                    </Track.Thumb>
                                </Track>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

Niestety to się nie kompiluje i dostaje jakieś nielogiczne błędy dla mnie. To zwykłe dodanie słownika, nie mam pojęcia czemu mi się coś takiego dzieje :(
user image

0
<Window x:Class="MP3PlayerProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:standardControl="clr-namespace:MP3PlayerProject.StandardControl"
        xmlns:componentControl="clr-namespace:MP3PlayerProject.ComponentControl"
        xmlns:mp3PlayerProject="clr-namespace:MP3PlayerProject"
        Title="MainWindow" Height="600" Width="1000" x:Name="Window" SizeChanged="MainWindow_OnSizeChanged"  StateChanged="MainWindow_OnStateChanged" >
    <Window.Resources>
        <mp3PlayerProject:WidthAndHeightConventer x:Key="MyConventer"></mp3PlayerProject:WidthAndHeightConventer>
        <ResourceDictionary x:Key="ResourceDictionary">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ScrollBarStyle.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Grid.Background>
            <RadialGradientBrush GradientOrigin="0.5,0.5">
                <GradientStop Color="#48494c" Offset="0.0"/>
                <GradientStop Color="#252529" Offset="1.0"/>
            </RadialGradientBrush>
        </Grid.Background>
    <Grid.RowDefinitions>
        <RowDefinition Height="8*"></RowDefinition>
        <RowDefinition Height="2*"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid Row="0">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="ColumnDefinition1" Width="{Binding ElementName=Window,Path=Width,Converter={StaticResource MyConventer},ConverterParameter=1}"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
            <Border BorderThickness="3">
                <Border.BorderBrush>
                    <LinearGradientBrush EndPoint="0.0,0.0" StartPoint="4.0,100.0">
                        <GradientStop Color="Gray" Offset="0.0"/>
                        <GradientStop Color="#252529" Offset="1.0"/>
                    </LinearGradientBrush>
                </Border.BorderBrush>
                <Grid Background="White" Column="0"></Grid>
            </Border>
            <Border Grid.Column="1" BorderThickness="3">
                <Border.BorderBrush>
                    <LinearGradientBrush EndPoint="0.0,0.0" StartPoint="4.0,100.0">
                        <GradientStop Color="Gray" Offset="0.0"/>
                        <GradientStop Color="#252529" Offset="1.0"/>
                    </LinearGradientBrush>
                </Border.BorderBrush>
                <Grid Column="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="6*"></ColumnDefinition>
                        <ColumnDefinition Width="4*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Grid Column="0">
                        <ScrollViewer Margin="8" HorizontalScrollBarVisibility="Auto">
                            <Image Source="../Assets/ControlImages/Stars/Star_Full.png" Width="1024" Height="768" />
                        </ScrollViewer>
                    </Grid>
                    <Grid Column="1">
                        <TextBlock FontFamily="/MP3PlayerProject;component/Assets/Fonts/#Century Gothic" Foreground="White" TextWrapping="WrapWithOverflow" x:Name="BandInfoTextBlock"></TextBlock></Grid>
                </Grid>
            </Border>
        </Grid>
    <Grid Row="1">
            <!-- <componentControl:StarPanel HorizontalAlignment="Center"></componentControl:StarPanel>-->
        <componentControl:BottomPanel x:Name="BottomPanel" ></componentControl:BottomPanel>
    </Grid>
    </Grid>
</Window>
 
0

Ja czuje że ty masz jakiś ViewModel i próbujesz używać w nim kontrolek z View nie mając referencji do samego View.
Pokaż wszystkie błędy i gdzie używasz np ColumnDefinition1

0

Tak jak tu jest: http://stackoverflow.com/questions/16538104/adding-converter-declaration
Konwerter ma być w środku ResourceDictionary.
Czemu dodajesz to samo dwa razy? Raz w Window.Resources i raz w Application.Resources.

0

Mam dwa nowe pytania, zrobiłem nowego commita na githubie. Oba pytania dotyczą tego pliku https://github.com/MagowieAEiI/MP3Player/blob/master/C%23/MP3PlayerProject/MP3PlayerProject/ScrollBarStyle.xaml#L81 .

  1. Proszę spojrzeć na linijkę 89. Chciałbym zrobić zaokrąglenia na rogach grida, ale gdy to odkomentuje Thub nie jest widoczny, ma taki sam kolor jak border, da się go złapać i przewijać content.
  2. Jak zrobić styl scrolla który ma wysokość np. 2 razy mniejszą niż wielkość gridu którego to treść będziemy przesuwać ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1