无法通过资源将WPF ContentControl作为位图加载

时间:2018-09-27 09:58:12

标签: c# wpf bitmap resourcedictionary contentcontrol

对于第三方产品,我需要将ContentControl转换为Bitmap。我认为这没问题,因为ContentControl是可以在位图中呈现的UIElement。

但是,如果我绘制此位图,则看不到任何图像。

它似乎不起作用,因为我的应用程序资源中有contentControl,如果尝试加载它,则会找到它,但是所有属性均为null或处于异常状态。怎么了?

这是我的contentControl

<ContentControl x:Key="LocationMarker" Width="356" Height="524">
<Canvas Width="356" Height="524">
  <Path Width="355.912" Height="524.355" Canvas.Left="0" Canvas.Top="-0.354675" Stretch="Fill" Fill="{DynamicResource HeaderColorBrush}" Data="...."/>
  <Path Width="150" Height="200" Canvas.Left="100" Canvas.Top="50" Stretch="Fill" Fill="{DynamicResource HeaderColorBrush}" Data="..."/>
  <Path Width="200" Height="170" Canvas.Left="78" Canvas.Top="300" Stretch="Fill" Fill="{DynamicResource HeaderColorBrush}" Data="..."/>
</Canvas>

那就是我试图得到它的方式:

var contentControl = Application.Current.Resources.MergedDictionaries.SelectMany(x => x.MergedDictionaries).FirstOrDefault(x => x.Source.OriginalString.Contains("ContentControls.xaml"))?["LocationMarker"] as ContentControl;
  if (contentControl != null)
  {
    var renderTargetBitmap = new RenderTargetBitmap(41, 74, 96, 96, PixelFormats.Pbgra32);
    renderTargetBitmap.Render(contentControl);
    var encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
    var stream = new MemoryStream();
    encoder.Save(stream);}

contentControl可能是错误的类型吗?通过资源获取它的方法是否错误?

这就是它在调试器中的外观: debugger screenshot

每个提示都值得赞赏!

1 个答案:

答案 0 :(得分:1)

这对我有用,请注意在原始代码中添加了function filteredArray(arr, elem) { let newArr = []; for (let i = 0; i < arr.length; i++){ for (let j = 0; j < arr[i].length; j++) { if (arr[i][j] === elem) { arr.splice(i--, 1); newArr = [...arr] } } } return newArr; } console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 19)); Measure调用。

Arrange

代码从this answer开始采用。