Custom slider - chycení jezdce myší   zodpovězená otázka

WPF

Dobrý den,

Měl bych dotaz, v projektu mám slider s vlastní xaml šablonou.

Šablona je vytvořena z gridu o třech řádcích (jde o vertikální slider), kde krajní jsou repeat button pro větší přírůstek (výška řádku Auto), a prostřední je Thumb.

Nevím jak docílit toho, abych mohl chytit thumb myší ?

Fungují klávesy Up a Down pro malou změnu, PgUp/PgDown pro velkou změnu, kliknutí myší do prostoru repeatbuttonu se také chová jak má.

Př.:

Thumb slideru:

<Style x:Key="ZakladacThumb" TargetType="{x:Type Thumb}">
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Image Source="{StaticResource ZakladacImage}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Repeat button:

<Style x:Key="SliderRepeatButton" TargetType="{x:Type RepeatButton}">
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="IsTabStop" Value="false"/>
    <Setter Property="Focusable" Value="false"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type RepeatButton}">
                <Border Background="Transparent" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Control template slideru:

<ControlTemplate x:Key="Vez1SkladVerticalSliderTemplate" TargetType="{x:Type Slider}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="1*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <Image Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="10" Grid.RowSpan="2" Source="{StaticResource Vez1Image}" Stretch="Fill" Margin="0" />
        <Track Grid.Row="1" Grid.Column="4" Grid.ColumnSpan="5"  Margin="0">
            <Track.DecreaseRepeatButton>
                <RepeatButton Style="{StaticResource SliderRepeatButton}" Command="Slider.DecreaseLarge" />
            </Track.DecreaseRepeatButton>
            <Track.Thumb>
                <Thumb Style="{StaticResource ZakladacThumb}"/>
            </Track.Thumb>
            <Track.IncreaseRepeatButton>
                <RepeatButton Style="{StaticResource SliderRepeatButton}" Command="Slider.IncreaseLarge" />
            </Track.IncreaseRepeatButton>
        </Track>
    </Grid>
</ControlTemplate>

Styl:

<Style x:Key="Vez1Slider" TargetType="{x:Type Slider}">
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="Template" Value="{StaticResource Vez1SkladVerticalSliderTemplate}" />
</Style>

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chyba bude asi v tom, že nemáte pojmenované named parts prvku, který templatujete. Zkuste přidat k <Track/> atribut Name="PART_Track". Taky byste měl pojmenovat PART_SelectionRange. Named parts Slideru jsou popsané tady a je tam i příklad fungujícího otemplatovaného Slideru:

http://msdn.microsoft.com/en-us/library/...

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za odpověď

měl jste pravdu bylo to atributu Name prvku Track ("Name="PART_Track").

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback