saimanisha Ответов: 0

Как обновить tickbar слайдера в WPF?


я пытался обновить тикбар слайдера, но не мог часто обновлять его ..он работает только один раз .он не отражает измененные значения в следующий раз .но значения передавались, но drawingcontext не был переопределен.

этот приведенный ниже код работает только один раз .
он ударил во второй раз, но значения не были chnaged .

Что я уже пробовал:

это xaml--> слайдер

<pre><Slider   Height="27" x:Name="slider" TickPlacement="TopLeft"   Margin="5,0,0,0" IsMoveToPointEnabled="True"  Width="458"   Template="{DynamicResource Slider}"  Style="{DynamicResource Horizontal_Slider}">



это мой стиль слайдера
<wrbitmap:CustomTickBar x:Name="TopCustomTicker" Fill="{TemplateBinding Foreground}"   Height="3" Margin="0,-15,0,0"  Placement="Top" Grid.Row="0" Visibility="Visible"></wrbitmap:CustomTickBar>
<TickBar x:Name="BottomTick" Fill="White"   SnapsToDevicePixels="True" Grid.Row="2"   Placement="Top" Height="4"  Margin="0,-35,0,0" Visibility="Visible" />


с фоновым кодом
<pre> public class CustomTickBar : TickBar
    {
        DrawingGroup backingStore = new DrawingGroup();

        DrawingVisual drawingVisual = new DrawingVisual();
//i was calling this method from other class so that i want to update new values 


        public void ResetTimes(long ImageStartTime, double TickFrequency)
        {

            this.StartPlayerTime = ImageStartTime;
            var drawingContext = backingStore.Open();
            // var  drawingContext = drawingVisual.RenderOpen();          
            OnRender(drawingContext);

            this.InvalidateVisual();

            drawingContext.Close();
            //CustomTickBar ticker =Application.Current.FindResource TopCustomTicker
        }

        public static double Tickfrequency;
        public long StartPlayerTime;
        protected override void OnRender(System.Windows.Media.DrawingContext dc)
        {

            double num = this.Maximum - this.Minimum;
            double y = this.ReservedSpace * 0.5;
            FormattedText formattedText = null;
            double x = 0;
            //   TickFrequency
            for (double i = 0; i <= num; i += this.TickFrequency)
            {
                var time = TimeSpan.FromSeconds(StartPlayerTime);
                var ti = TimeSpan.FromSeconds(i);
                double t = (time + ti).TotalSeconds;
                var T = TimeSpan.FromSeconds(t);
                var TIME = T.Hours + ":" + T.Minutes;
                formattedText = new FormattedText(TIME.ToString(), CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight,

                        new Typeface("Verdana"), 8, Brushes.White);
                //if (this.Minimum == i)
                //    x = 0;
                //else

                x += this.ActualWidth / (num / this.TickFrequency);
                dc.DrawText(formattedText, new Point(x - 80, y));

            }
}

0 Ответов