只有最后一个用户控件显示内容控件

编程入门 行业动态 更新时间:2024-10-08 02:21:34
本文介绍了只有最后一个用户控件显示内容控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个奇怪的问题。我创建了一个带有标签和画布的用户控件。 画布引用一个资源。

但是画布只显示在我的stackpanel中的最后一个控件上。

这是我的窗口

< Window xmlns =schemas.microsoft。 com / winfx / 2006 / xaml / presentation xmlns:x =schemas.microsoft/winfx/2006/xaml xmlns:local =clr-namespace:UserControlSolution xmlns:d =schemas.microsoft/expression/blend/2008xmlns:mc =schemas.openxmlformats/markup-compatibility/2006mc:Ignorable =dx :Class =UserControlSolution.MainWindow Title =MainWindowHeight =836Width =270.5Background =#FF2B2B2BBorderBrush ={DynamicResource Border}Loaded =Window_Loaded> < Window.Resources> < LinearGradientBrush x:Key =BorderEndPoint =0.5,1MappingMode =RelativeToBoundingBoxStartPoint =0.5,0 < GradientStop Color =#FF6C6C6COffset =0.009/> < GradientStop Color =#FFA1A1A1Offset =1/> < / LinearGradientBrush> < SolidColorBrush x:Key =OrangeColor =#FFF5610E/> < SolidColorBrush x:Key =RedColor =#FFE51400/> < SolidColorBrush x:Key =BlueColor =#FF1BA1E2/> < SolidColorBrush x:Key =YellowColor =#FFFFC40D/> < /Window.Resources> < StackPanel Margin =0,10,0,0> < local:UserControlButton x:Name =RobbyHeight =50VerticalAlignment =TopMargin =2,0,0,5/> < local:UserControlButton x:Name =ErwinHeight =50VerticalAlignment =TopMargin =2,0,0,5/& < local:UserControlButton x:Name =LaurensHeight =50VerticalAlignment =TopMargin =2,0,0,5/> < local:UserControlButton x:Name =KevinHeight =50VerticalAlignment =TopMargin =2,0,0,5/> < local:UserControlButton x:Name =LiesbethHeight =50VerticalAlignment =TopMargin =2,0,0,5Background ={DynamicResource Orange}/> < local:UserControlButton x:Name =JackHeight =50VerticalAlignment =TopMargin =2,0,0,5/& < local:UserControlButton x:Name =FilipHeight =50VerticalAlignment =TopMargin =2,0,0,5/> < local:UserControlButton x:Name =StefaanHeight =50VerticalAlignment =TopMargin =2,0,0,5Background ={DynamicResource Red}/> < local:UserControlButton x:Name =SamiHeight =50VerticalAlignment =TopMargin =2,0,0,5Background ={DynamicResource Blue}/> < local:UserControlButton x:Name =JurgenHeight =50VerticalAlignment =TopMargin =2,0,0,5/> < / StackPanel>

这是我的用户控制,底部的内容控件引用我的画布。

< UserControl xmlns =http: microsoft/winfx/2006/xaml/presentation xmlns:x =schemas.microsoft/winfx/2006/xaml xmlns:d =http:// schemas.microsoft/expression/blend/2008 xmlns:mc =schemas.openxmlformats/markup-compatibility/2006 xmlns:i =http:// schemas.microsoft/expression/2010/interactivityxmlns:ei =schemas.microsoft/expression/2010/interactions mc:Ignorable =dx:Class =UserControlSolution.UserControlButtonx:Name =UserControl Height =50Background =#FF2F2F2F> < i:Interaction.Triggers> < i:EventTrigger EventName =MouseEnter> < ei:GoToStateAction TargetObject ={Binding ElementName = UserControl}StateName =Expand/> < / i:EventTrigger> < i:EventTrigger EventName =MouseLeave> < ei:GoToStateAction TargetObject ={Binding ElementName = UserControl}StateName =Collapse/> < / i:EventTrigger> < / i:Interaction.Triggers> < Grid x:Name =LayoutRootHeight =50RenderTransformOrigin =0.5,0.5> < VisualStateManager.VisualStateGroups> < VisualStateGroup x:Name =VisualStateGroup> < VisualState x:Name =Expand> < Storyboard> < DoubleAnimationUsingKeyFrames Storyboard.TargetProperty =(FrameworkElement.Height)Storyboard.TargetName =LayoutRoot> < EasingDoubleKeyFrame KeyTime =0Value =80/> < / DoubleAnimationUsingKeyFrames> < DoubleAnimationUsingKeyFrames Storyboard.TargetProperty =(FrameworkElement.Height)Storyboard.TargetName =UserControl> < EasingDoubleKeyFrame KeyTime =0Value =79/> < / DoubleAnimationUsingKeyFrames> < / storyboard> < / VisualState> < VisualState x:Name =Collapse/> < / VisualStateGroup> < /VisualStateManager.VisualStateGroups> < Rectangle x:Name =rectangleRenderTransformOrigin =0.5,0.5Width =230Height =50/> < TextBlock x:Name =NameLabelFontSize =16Foreground =#FFE5E5E5高度=34宽度=149文本=Onthaal TelefoonVerticalAlignment =顶Horizo​​ntalAlignment = Margin =10,10,0,0FontFamily =Segoe UI Semibold/> < Viewbox Horizo​​ntalAlignment =RightVerticalAlignment =TopHeight =50Width =58.789> < ContentControl Content ={DynamicResource appbar_close}Width =91.96Height =79.911/> < / Viewbox> < / Grid> < / UserControl>

这是我的应用程序文件,其中我定义了我的资源

< Application x:Class =UserControlSolution.App xmlns =schemas.microsoft/winfx/2006/xaml/presentation xmlns:x =schemas.microsoft/winfx/2006/xaml StartupUri =MainWindow.xaml> < Application.Resources> < Canvas x:Key =appbar_closex:Name =appbar_closeWidth =76Height =76Clip =F1 M 0,0L 76,0L 76,76L 0,76L 0, 0> < Path Width =31.6666Height =31.6667Canvas.Left =22.1666Canvas.Top =22.1667Stretch =FillFill =#FFEE1111Data =F1 M 26.9166,22.1667 L 37.9999,33.25L 49.0832,22.1668L 53.8332,26.9168L 42.7499,38L 53.8332,49.0834L 49.0833,53.8334L 37.9999,42.75L 26.9166,53.8334L 22.1666,49.0833L 33.25,38L 22.1667,26.9167L 26.9166,22.1667 Z行程= #FF2F2F2F/> < / Canvas> < Canvas x:Key =appbar_checkx:Name =appbar_checkWidth =76Height =76Clip =F1 M 0,0L 76,0L 76,76L 0 ,76L 0,0> < Path Width =37.9998Height =31.6665Canvas.Left =19.0001Canvas.Top =22.1668Stretch =FillFill =#FF00A300Data =F1 M 23.7501,33.25 L 34.8334,44.3333L 52.2499,22.1668L 56.9999,26.9168L 34.8334,53.8333L 19.0001,38L 23.7501,33.25 Z行程=#FF2F2F2F/> < / Canvas> < Canvas x:Key =appbar_arrow_rightx:Name =appbar_arrow_rightWidth =76Height =76Clip =F1 M 0,0L 76,0L 76,76L 0 ,76L 0,0> < Path Width =39.25Height =28Canvas.Left =19.0002Canvas.Top =24Stretch =FillFill =#FF2B5797Data =F1 M 19.0002,34L 19.0002,42L 43.7502,42L 33.7502,52L 44.2502,52L 58.2502,38L 44.2502,24L 33.7502,24L 43.7502,34L 19.0002,34 Z行程=#FF2F2F2F/> < / Canvas> < SolidColorBrush x:Key =UserControlBackgroundColor =#FF2F2F2F/> < /Application.Resources>

从截图中可以看到,只有最后一个控件显示画布.. <由于您只有一个 Canvas 和每个,因此您可以使用

解决方案

Visual 在视觉树中只能有一个父视图,因此每次将资源放置在视觉树的该位置并从之前的位置删除。您可以将 Canvas 直接放入 UserControl 中的 ViewBox make Path 资源,或者尝试设置 <$ Canvas 上的 false 这将导致在每次引用它时创建新的资源实例:

< Application.Resources> < Canvas x:Key =appbar_closex:Shared =False...> <! - - > < / Canvas> < /Application.Resources>

I have a weird problem. I've created a usercontrol with a label and a canvas. The canvas references a resource.

But the canvas is only shown on the last control in my stackpanel.

This is my window

<Window xmlns="schemas.microsoft/winfx/2006/xaml/presentation" xmlns:x="schemas.microsoft/winfx/2006/xaml" xmlns:local="clr-namespace:UserControlSolution" xmlns:d="schemas.microsoft/expression/blend/2008" xmlns:mc="schemas.openxmlformats/markup-compatibility/2006" mc:Ignorable="d" x:Class="UserControlSolution.MainWindow" Title="MainWindow" Height="836" Width="270.5" Background="#FF2B2B2B" BorderBrush="{DynamicResource Border}" Loaded="Window_Loaded" > <Window.Resources> <LinearGradientBrush x:Key="Border" EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0"> <GradientStop Color="#FF6C6C6C" Offset="0.009"/> <GradientStop Color="#FFA1A1A1" Offset="1"/> </LinearGradientBrush> <SolidColorBrush x:Key="Orange" Color="#FFF5610E"/> <SolidColorBrush x:Key="Red" Color="#FFE51400"/> <SolidColorBrush x:Key="Blue" Color="#FF1BA1E2"/> <SolidColorBrush x:Key="Yellow" Color="#FFFFC40D"/> </Window.Resources> <StackPanel Margin="0,10,0,0"> <local:UserControlButton x:Name="Robby" Height="50" VerticalAlignment="Top" Margin="2,0,0,5"/> <local:UserControlButton x:Name="Erwin" Height="50" VerticalAlignment="Top" Margin="2,0,0,5" /> <local:UserControlButton x:Name="Laurens" Height="50" VerticalAlignment="Top" Margin="2,0,0,5"/> <local:UserControlButton x:Name="Kevin" Height="50" VerticalAlignment="Top" Margin="2,0,0,5"/> <local:UserControlButton x:Name="Liesbeth" Height="50" VerticalAlignment="Top" Margin="2,0,0,5" Background="{DynamicResource Orange}"/> <local:UserControlButton x:Name="Jack" Height="50" VerticalAlignment="Top" Margin="2,0,0,5"/> <local:UserControlButton x:Name="Filip" Height="50" VerticalAlignment="Top" Margin="2,0,0,5"/> <local:UserControlButton x:Name="Stefaan" Height="50" VerticalAlignment="Top" Margin="2,0,0,5" Background="{DynamicResource Red}"/> <local:UserControlButton x:Name="Sami" Height="50" VerticalAlignment="Top" Margin="2,0,0,5" Background="{DynamicResource Blue}"/> <local:UserControlButton x:Name="Jurgen" Height="50" VerticalAlignment="Top" Margin="2,0,0,5"/> </StackPanel>

This is my usercontrol, in the contentcontrol at the bottom I reference my canvas.

<UserControl xmlns="schemas.microsoft/winfx/2006/xaml/presentation" xmlns:x="schemas.microsoft/winfx/2006/xaml" xmlns:d="schemas.microsoft/expression/blend/2008" xmlns:mc="schemas.openxmlformats/markup-compatibility/2006" xmlns:i="schemas.microsoft/expression/2010/interactivity" xmlns:ei="schemas.microsoft/expression/2010/interactions" mc:Ignorable="d" x:Class="UserControlSolution.UserControlButton" x:Name="UserControl" Height="50" Background="#FF2F2F2F"> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseEnter"> <ei:GoToStateAction TargetObject="{Binding ElementName=UserControl}" StateName="Expand"/> </i:EventTrigger> <i:EventTrigger EventName="MouseLeave"> <ei:GoToStateAction TargetObject="{Binding ElementName=UserControl}" StateName="Collapse"/> </i:EventTrigger> </i:Interaction.Triggers> <Grid x:Name="LayoutRoot" Height="50" RenderTransformOrigin="0.5,0.5"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="VisualStateGroup"> <VisualState x:Name="Expand"> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="LayoutRoot"> <EasingDoubleKeyFrame KeyTime="0" Value="80"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="UserControl"> <EasingDoubleKeyFrame KeyTime="0" Value="79"/> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="Collapse"/> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Rectangle x:Name="rectangle" RenderTransformOrigin="0.5,0.5" Width="230" Height="50"/> <TextBlock x:Name="NameLabel" FontSize="16" Foreground="#FFE5E5E5" Height="34" Width="149" Text="Onthaal Telefoon" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,10,0,0" FontFamily="Segoe UI Semibold"/> <Viewbox HorizontalAlignment="Right" VerticalAlignment="Top" Height="50" Width="58.789"> <ContentControl Content="{DynamicResource appbar_close}" Width="91.96" Height="79.911" /> </Viewbox> </Grid> </UserControl>

And this is my App file where I define my resources

<Application x:Class="UserControlSolution.App" xmlns="schemas.microsoft/winfx/2006/xaml/presentation" xmlns:x="schemas.microsoft/winfx/2006/xaml" StartupUri="MainWindow.xaml"> <Application.Resources> <Canvas x:Key="appbar_close" x:Name="appbar_close" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0"> <Path Width="31.6666" Height="31.6667" Canvas.Left="22.1666" Canvas.Top="22.1667" Stretch="Fill" Fill="#FFEE1111" Data="F1 M 26.9166,22.1667L 37.9999,33.25L 49.0832,22.1668L 53.8332,26.9168L 42.7499,38L 53.8332,49.0834L 49.0833,53.8334L 37.9999,42.75L 26.9166,53.8334L 22.1666,49.0833L 33.25,38L 22.1667,26.9167L 26.9166,22.1667 Z " Stroke="#FF2F2F2F"/> </Canvas> <Canvas x:Key="appbar_check" x:Name="appbar_check" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0"> <Path Width="37.9998" Height="31.6665" Canvas.Left="19.0001" Canvas.Top="22.1668" Stretch="Fill" Fill="#FF00A300" Data="F1 M 23.7501,33.25L 34.8334,44.3333L 52.2499,22.1668L 56.9999,26.9168L 34.8334,53.8333L 19.0001,38L 23.7501,33.25 Z " Stroke="#FF2F2F2F"/> </Canvas> <Canvas x:Key="appbar_arrow_right" x:Name="appbar_arrow_right" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0"> <Path Width="39.25" Height="28" Canvas.Left="19.0002" Canvas.Top="24" Stretch="Fill" Fill="#FF2B5797" Data="F1 M 19.0002,34L 19.0002,42L 43.7502,42L 33.7502,52L 44.2502,52L 58.2502,38L 44.2502,24L 33.7502,24L 43.7502,34L 19.0002,34 Z " Stroke="#FF2F2F2F"/> </Canvas> <SolidColorBrush x:Key="UserControlBackground" Color="#FF2F2F2F"/> </Application.Resources>

As you can see in the screenshot, only the last control shows the canvas..

解决方案

Since you have only one Canvas and each Visual can have only one parent in visual tree therefore each time you place your resource it's put in that place of visual tree and removed from the previous place. You can either put Canvas directly into ViewBox in UserControl and make Path a resource or you can try setting x:Shared attribute to false on your Canvas which should result in new instance of resource being created each time you refer to it:

<Application.Resources> <Canvas x:Key="appbar_close" x:Shared="False" ...> <!-- --> </Canvas> </Application.Resources>

更多推荐

只有最后一个用户控件显示内容控件

本文发布于:2023-11-13 03:01:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1583242.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控件   内容   用户

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!