Visualbrush binding in a style System.Windows.Data Error: 2
Visualbrush binding in a style System.Windows.Data Error: 2
我只有一个简单的绑定,它运行良好,但有一个错误弹出窗口。
效果有效,但仍然出错。
错误是
System.Windows.Data错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。绑定表达式:(无路径);数据项=空;目标元素是 'VisualBrush' (HashCode=23487194);目标 属性 是 'Visual'(类型 'Visual')
我试过 x: Reference 但是会出现另一个错误。
如有帮助,不胜感激。
<Style TargetType="{x:Type Window}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Border
x:Name="RoundMask"
CornerRadius="10"
Background="white"/>
<!-- The main content -->
<Grid>
<Grid.OpacityMask>
<VisualBrush Visual="{Binding ElementName=RoundMask}" />
</Grid.OpacityMask>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
像这样重新模板化 window 并不是我处理这类事情的真正方式。
我会使用更类似于此示例中的方法:
https://gallery.technet.microsoft.com/ThWPFPolishing-Chrome-f41be7fe
看完了window就是
Window6,使用资源字典 Dictionary1 中的 WindowChrome 样式。
其中有一个大的圆形关闭按钮。但在下载之前给你一个想法:
<Style x:Key="FinishedWindow" TargetType="{x:Type Window}">
<Setter Property="FontFamily" Value="Comic Sans MS"/>
<Setter Property="Foreground" Value="{StaticResource DarkDark}"/>
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="0"
CornerRadius="20"
GlassFrameThickness="0"
NonClientFrameEdges="None"
ResizeBorderThickness="5"
/>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Border Background="{StaticResource BrightMid}" BorderBrush="{StaticResource DarkLight}" BorderThickness="4,4,6,6"
CornerRadius="12">
<Border.Effect>
<BlurEffect KernelType="Gaussian" Radius="12" RenderingBias="Quality" />
</Border.Effect>
</Border>
<Border BorderBrush="{StaticResource DarkDark}" BorderThickness="2"
CornerRadius="12" ClipToBounds="True">
</Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}"
Foreground="{StaticResource DarkDark}"
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
FontWeight="Bold"
FontSize="16"
/>
<Button Name="CloseButton"
Width="20" Height="20"
Grid.Row="0"
HorizontalAlignment="Right"
BorderThickness="0"
Margin="0,12,12,0"
Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CloseCommand}"
Style="{StaticResource CloseButton}"/>
<ContentPresenter Grid.Row="1" Margin="12"/>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
我试试你的风格。
只是隐式使用它根本没有效果。
我把它放在app.xaml里面给了它一个key
<Application.Resources>
<Style TargetType="{x:Type Window}" x:Key="roundedWindowStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Border
x:Name="RoundMask"
CornerRadius="10"
Background="white"/>
<!-- The main content -->
<Grid>
<Grid.OpacityMask>
<VisualBrush Visual="{Binding ElementName=RoundMask}" />
</Grid.OpacityMask>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
然后我将其应用到 mainwindow
<Window
...
Title="MainWindow"
Style="{StaticResource roundedWindowStyle}"
按 f5... 就可以了。嗯。
如果你忽略 window chrome 意味着它不能像你想要的那样工作。
您可能应该考虑使用 window chrome。
有了你那里的东西。
至少,您需要在该网格内有一个 Contentpresenter。
因为 window 是一个内容控件,但如果您在模板中没有 contentpresenter,它根本不会显示任何内容。
我只有一个简单的绑定,它运行良好,但有一个错误弹出窗口。
效果有效,但仍然出错。
错误是 System.Windows.Data错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。绑定表达式:(无路径);数据项=空;目标元素是 'VisualBrush' (HashCode=23487194);目标 属性 是 'Visual'(类型 'Visual')
我试过 x: Reference 但是会出现另一个错误。
如有帮助,不胜感激。
<Style TargetType="{x:Type Window}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Border
x:Name="RoundMask"
CornerRadius="10"
Background="white"/>
<!-- The main content -->
<Grid>
<Grid.OpacityMask>
<VisualBrush Visual="{Binding ElementName=RoundMask}" />
</Grid.OpacityMask>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
像这样重新模板化 window 并不是我处理这类事情的真正方式。
我会使用更类似于此示例中的方法:
https://gallery.technet.microsoft.com/ThWPFPolishing-Chrome-f41be7fe
看完了window就是
Window6,使用资源字典 Dictionary1 中的 WindowChrome 样式。
其中有一个大的圆形关闭按钮。但在下载之前给你一个想法:
<Style x:Key="FinishedWindow" TargetType="{x:Type Window}">
<Setter Property="FontFamily" Value="Comic Sans MS"/>
<Setter Property="Foreground" Value="{StaticResource DarkDark}"/>
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="0"
CornerRadius="20"
GlassFrameThickness="0"
NonClientFrameEdges="None"
ResizeBorderThickness="5"
/>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Border Background="{StaticResource BrightMid}" BorderBrush="{StaticResource DarkLight}" BorderThickness="4,4,6,6"
CornerRadius="12">
<Border.Effect>
<BlurEffect KernelType="Gaussian" Radius="12" RenderingBias="Quality" />
</Border.Effect>
</Border>
<Border BorderBrush="{StaticResource DarkDark}" BorderThickness="2"
CornerRadius="12" ClipToBounds="True">
</Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}"
Foreground="{StaticResource DarkDark}"
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
FontWeight="Bold"
FontSize="16"
/>
<Button Name="CloseButton"
Width="20" Height="20"
Grid.Row="0"
HorizontalAlignment="Right"
BorderThickness="0"
Margin="0,12,12,0"
Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CloseCommand}"
Style="{StaticResource CloseButton}"/>
<ContentPresenter Grid.Row="1" Margin="12"/>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
我试试你的风格。
只是隐式使用它根本没有效果。
我把它放在app.xaml里面给了它一个key
<Application.Resources>
<Style TargetType="{x:Type Window}" x:Key="roundedWindowStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Border
x:Name="RoundMask"
CornerRadius="10"
Background="white"/>
<!-- The main content -->
<Grid>
<Grid.OpacityMask>
<VisualBrush Visual="{Binding ElementName=RoundMask}" />
</Grid.OpacityMask>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
然后我将其应用到 mainwindow
<Window
...
Title="MainWindow"
Style="{StaticResource roundedWindowStyle}"
按 f5... 就可以了。嗯。
如果你忽略 window chrome 意味着它不能像你想要的那样工作。
您可能应该考虑使用 window chrome。
有了你那里的东西。
至少,您需要在该网格内有一个 Contentpresenter。 因为 window 是一个内容控件,但如果您在模板中没有 contentpresenter,它根本不会显示任何内容。