private void OnHueRingImageSizeChanged(object sender, SizeChangedEventArgs e) { if (hueRingImage.ActualHeight == 0 || hueRingImage.ActualWidth == 0) { return; } var minSize = Math.Min(hueRingImage.ActualHeight, hueRingImage.ActualWidth); var outerRingRadius = minSize / 2; var innerRingRadius = outerRingRadius * 2 / 3; var triangleWidth = innerRingRadius * Math.Sqrt(3); var triangleHeight = innerRingRadius * 3 / 2; var wb = new WriteableBitmap((int)triangleWidth, (int)triangleHeight); wb.RenderColorPickerSaturationLightnessTriangle(); saturationLightnessTriangleImage.Source = wb; saturationLightnessTriangleImage.Margin = new Thickness(0, outerRingRadius - innerRingRadius, 0, outerRingRadius - innerRingRadius * 0.5); }