У меня есть пользовательский элемент управления класса DottedCanvas, унаследованный от Canvas, который содержит некоторые пользовательские элементы управления класса TreeNode, унаследованные от TextBox.Элемент управления canvas имеет стиль:
<Style x:Key="DottedStyle" TargetType="TreeBuilder:DottedCanvas">
<!--Makes canvas dotted-->
<Setter Property="Background" Value="{StaticResource DottedBrush}"/>
<Style.Triggers>
<Trigger Property="DottedEnabled" Value="False">
<!--Removes dots when printing-->
<Setter Property="Background" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
Элементы управления TextBox обернуты в UserControl и также имеют свой собственный стиль:
<Style x:Key="NodeBoxStyle" TargetType="{x:Type TreeBuilder:TreeNodeBox}">
<Setter Property="BorderThickness" Value="1"/>
<Style.Triggers>
<!--Must remove d-->
<Trigger Property="IsBeingPrinted" Value="true">
<Setter Property="BorderThickness" Value="0"/>
</Trigger>
</Style.Triggers>
</Style>
Затем я пытаюсь распечатать этот холст наточечный рисунок:
public BitmapSource BuildImage(Tree tree)
{
canvas = tree.Canvas;
PrepareTree(canvas);
Size size = GetSize();
canvas.Measure(size);
canvas.Arrange(new Rect(size));
RenderTargetBitmap image = new RenderTargetBitmap(
(int)size.Width,
(int)size.Height,
96,
96,
PixelFormats.Pbgra32);
image.Render(canvas);
UnprepareTree(canvas);
return image;
}
private void UnprepareTree(Canvas canvas)
{
canvas.DottedEnabled = true;
foreach (var element in canvas.Children.OfType<IPrintable>())
{
element.IsBeingPrinted = false;
}
}
private void PrepareTree(Canvas canvas)
{
canvas.Focus();
canvas.DottedEnabled = false;
foreach (var element in canvas.Children.OfType<IPrintable>())
{
element.IsBeingPrinted = true;
}
}
Изображение выглядит так:
Результат
У Canvas нет точек (стиль сработал), но текстовый блокBorderThickness остается 1 на изображении.Точка останова в функции PrepareTree()
показывает, что свойство TextBox BorderThickness установлено в ноль (это означает, что стиль также работает).Как я могу получить «новую» версию TextBoxes на изображении?