Edw*_*uay 51 wpf xaml hyperlink
我想要做的就是在XAML中创建一个小超链接.我已经尝试了一切.我放弃.
这是什么语法?
<StackPanel Width="70" HorizontalAlignment="Center">
<Hyperlink Click="buttonClose_Click" Cursor="Hand"
Foreground="#555" Width="31" Margin="0 0 0 15"
HorizontalAlignment="Right">Close</Hyperlink>
<Button Width="60" Margin="0 0 0 3">Test 1</Button>
<Button Width="60" Margin="0 0 0 3">Test 2</Button>
<Button Width="60" Margin="0 0 0 3">Test 3</Button>
<Button Width="60" Margin="0 0 0 3">Test 4</Button>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
Visual Studio Team:在Visual Studio 2010中,我希望Clippy弹出并说"看起来你正在尝试制作一个超链接"并告诉我该怎么做.你不能用MEF那样做吗?这将是复古的酷,这些小"我如何做我已经知道如何做的HTML"问题在学习过程中耗费了大量时间与XAML.
Joe*_*ite 168
您无法将超链接添加到StackPanel - 您将收到运行时错误.(其实,我有点惊讶它不是一个编译时错误.)这是因为超链接不生活在WPF的"控制"侧<Button>
,并<StackPanel>
与被布置在屏幕上的矩形块和下降其他的东西UIElement
.相反,它生活在事物的"文本"方面,包括<Bold>
和<Run>
/ <Paragraph>
或其他一般的短语,用文字包裹和流动的线条和段落并从中下降TextElement
.
一旦你意识到有两个独立的类层次结构具有不同的布局行为,那么超链接将在事物的"文本"方面是有意义的(例如,使得在中间具有带超链接的段落变得容易,甚至对于跨越换行符的超链接).
但不,当你刚开始时,它不是那么容易被发现.
要混合两个世界,并使用超链接作为控件,您需要做的就是将它放在TextBlock中.TextBlock是一个控制事物(即,可以进入StackPanel),包含文本事物(即,可以包含超链接):
<TextBlock><Hyperlink Click="buttonClose_Click">Close</Hyperlink></TextBlock>
Run Code Online (Sandbox Code Playgroud)
Nir*_*Nir 37
您可以使用带有自定义控件模板的Button,下面的代码是一个有限的超链接样式按钮(例如它只支持文本超链接),但也许它会指向正确的方向.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="Link" TargetType="Button">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Foreground" Value="Blue"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock TextDecorations="Underline"
Text="{TemplateBinding Content}"
Background="{TemplateBinding Background}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Button Content="Click Me!" Style="{StaticResource Link}"/>
</Page>
Run Code Online (Sandbox Code Playgroud)
Nal*_*ran 27
试试这个:
<TextBlock>
<Hyperlink RequestNavigate="Hyperlink_RequestNavigate"
NavigateUri="http://www.msn.com">MSN</Hyperlink>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
private void Hyperlink_RequestNavigate(object sender,
System.Windows.Navigation.RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(e.Uri.AbsoluteUri);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
<TextBlock>
<Hyperlink NavigateUri="{Binding YourUri}" RequestNavigate="YourRequestNavigate">
<TextBlock Text="{Binding YourText}" />
</Hyperlink>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
这将链接嵌套文本块中的任何绑定文本,我还没有找到更好的方法,我希望如果可能的话,第一个文本块不存在。这也适用于DataTemplates。
归档时间: |
|
查看次数: |
78634 次 |
最近记录: |