![]() |
慷慨的蚂蚁 · 【邵阳市】北塔区摒弃陈规让人情往来“有里有面 ...· 1 年前 · |
![]() |
谦虚好学的鸵鸟 · 恒大汽车停工通知书背后:部分员工被待岗 ...· 2 年前 · |
![]() |
高大的蟠桃 · 喜友记抗疫系列漫画漫画完整版免费阅读-喜友记 ...· 2 年前 · |
![]() |
稳重的甘蔗 · 暴雨之下,Ta就是我们的平凡英雄!_新闻_央 ...· 2 年前 · |
![]() |
打酱油的莴苣 · 求推荐水彩颜料木盒,各位大佬买史明克,荷尔拜 ...· 2 年前 · |
我们正在创建一个XBAP应用程序,我们需要在单个页面中的不同位置有圆角,我们希望有一个WPF圆角容器来放置一堆其他元素。有没有人对我们如何最好地实现这一点有一些建议或示例代码?使用样式或创建自定义控件?
您不需要自定义控件,只需将您的容器放在边框元素中:
<Border BorderBrush="#FF000000" BorderThickness="1" CornerRadius="8">
<Grid/>
</Border>
您可以用任何布局容器替换
<Grid/>
...
我知道这不是对最初问题的回答...但您通常希望裁剪刚创建的圆角边框的内部内容。
Chris Cavanagh想出了一个 excellent way 来做这件事。
为此,我尝试了几种不同的方法。我觉得这首歌太棒了。
下面是xaml:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Black"
<!-- Rounded yellow border -->
<Border
HorizontalAlignment="Center"
VerticalAlignment="Center"
BorderBrush="Yellow"
BorderThickness="3"
CornerRadius="10"
Padding="2"
<!-- Rounded mask (stretches to fill Grid) -->
<Border
Name="mask"
Background="White"
CornerRadius="7"
<!-- Main content container -->
<StackPanel>
<!-- Use a VisualBrush of 'mask' as the opacity mask -->
<StackPanel.OpacityMask>
<VisualBrush Visual="{Binding ElementName=mask}"/>
</StackPanel.OpacityMask>
<!-- Any content -->
<Image Source="http://chriscavanagh.files.wordpress.com/2006/12/chriss-blog-banner.jpg"/>
<Rectangle
Height="50"
Fill="Red"/>
<Rectangle
Height="50"
Fill="White"/>
<Rectangle
Height="50"
Fill="Blue"/>
</StackPanel>
</Grid>
</Border>
</Page>
如果你想把一个按钮放在一个圆角矩形的边框里,你应该看看 msdn's example 。我是通过谷歌搜索问题的图像(而不是文本)找到的。它们笨重的外部矩形(谢天谢地)很容易移除。
请注意,您必须重新定义按钮的行为(因为您已经更改了ControlTemplate)。也就是说,在使用ControlTemplate.Triggers标记中的触发器标记(Property="IsPressed“Value="true")单击按钮时,需要定义按钮的行为。希望这能为其他人节省我浪费的时间:)
基于VB.Net代码的kobusb边界控制解决方案的实现。我用它来填充一个按钮控件的ListBox。Button控件是从MEF扩展创建的。每个扩展都使用MEF的ExportMetaData属性来描述扩展。这些扩展是VisiFire图表对象。用户按下从按钮列表中选择的按钮,以执行所需的图表。
' Create a ListBox of Buttons, one button for each MEF charting component.
For Each c As Lazy(Of ICharts, IDictionary(Of String, Object)) In ext.ChartDescriptions
Dim brdr As New Border
brdr.BorderBrush = Brushes.Black
brdr.BorderThickness = New Thickness(2, 2, 2, 2)
brdr.CornerRadius = New CornerRadius(8, 8, 8, 8)
Dim btn As New Button
AddHandler btn.Click, AddressOf GenericButtonClick
brdr.Child = btn
brdr.Background = btn.Background
btn.Margin = brdr.BorderThickness
btn.Width = ChartsLBx.ActualWidth - 22
btn.BorderThickness = New Thickness(0, 0, 0, 0)
btn.Height = 22
btn.Content = c.Metadata("Description")
btn.Tag = c
btn.ToolTip = "Push button to see " & c.Metadata("Description").ToString & " chart"
Dim lbi As New ListBoxItem
lbi.Content = brdr
ChartsLBx.Items.Add(lbi)
Public Event Click As RoutedEventHandler
Private Sub GenericButtonClick(sender As Object, e As RoutedEventArgs)
Dim btn As Button = DirectCast(sender, Button)
Dim c As Lazy(Of ICharts, IDictionary(Of String, Object)) = DirectCast(btn.Tag, Lazy(Of ICharts, IDictionary(Of String, Object)))
Dim w As Window = DirectCast(c.Value, Window)
Dim cc As ICharts = DirectCast(c.Value, ICharts)
c.Value.CreateChart()
w.Show()
End Sub
<System.ComponentModel.Composition.Export(GetType(ICharts))> _
<System.ComponentModel.Composition.ExportMetadata("Description", "Data vs. Time")> _
Public Class DataTimeChart
Implements ICharts
Public Sub CreateChart() Implements ICharts.CreateChart
End Sub
End Class
Public Interface ICharts
Sub CreateChart()
End Interface
Public Class Extensibility
Public Sub New()
Dim catalog As New AggregateCatalog()
catalog.Catalogs.Add(New AssemblyCatalog(GetType(Extensibility).Assembly))
'Create the CompositionContainer with the parts in the catalog
ChartContainer = New CompositionContainer(catalog)
ChartContainer.ComposeParts(Me)
Catch ex As Exception
Console.WriteLine(ex.ToString)
End Try
End Sub