Я думаю, что вы усложняете себе жизнь, используя WriteableBitmap.WritePixel.Вы будете гораздо лучше рисовать время с помощью Shapes или с помощью RendterTargetBitmap и DeviceContext.
Вот некоторый код того, как вы будете рисовать, используя этот метод.
XAML из MainForm:
<Grid>
<Image Name="Background"
Width="200"
Height="200"
VerticalAlignment="Center"
HorizontalAlignment="Center" />
</Grid>
Основной код MainForm:
private RenderTargetBitmap buffer;
private DrawingVisual drawingVisual = new DrawingVisual();
public MainWindow()
{
InitializeComponent();
}
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
buffer = new RenderTargetBitmap((int)Background.Width, (int)Background.Height, 96, 96, PixelFormats.Pbgra32);
Background.Source = buffer;
DrawStuff();
}
private void DrawStuff()
{
if (buffer == null)
return;
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
drawingContext.DrawRectangle(new SolidColorBrush(Colors.Red), null, new Rect(0, 0, 10, 10));
}
buffer.Render(drawingVisual);
}
Настройте ширину / высоту изображения по своему усмотрению.Вся ваша логика рисования должна быть внутри оператора using.Вы найдете, что методы DrawingContext гораздо более гибкие и более простые для понимания, чем WritePixel.Вызывайте DrawStuff всякий раз, когда вы хотите вызвать перерисовку.