如何在XAML中为边框设置MouseOver事件/触发器?我希望当鼠标悬停在边框上时边框变为绿色,然后当鼠标不再在边框上时返回蓝色.为什么我不能只使用以下代码:
<Border
Name="ClearButtonBorder"
Grid.Column="1"
CornerRadius="0,3,3,0"
Background="Blue">
<Border.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Border.Background" Value="Green" />
</Trigger>
<Trigger Property="Border.IsMouseOver" Value="False">
<Setter Property="Border.Background" Value="Blue" />
</Trigger>
</Border.Triggers>
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="X" />
</Border>
Run Code Online (Sandbox Code Playgroud)
我真的没有在WPF中获得这些触发器和样式.这样的拖累是不能实现这样简单的事情..请为我提供解决方案并帮助我理解我的代码到底有什么问题?谢谢一堆.
在下面提供的XAML中,我有时没有Phone的价值.当发生这种情况时,该值将丢失,但TextBlock
仍占用面板中的空间.我想隐藏空TextBlock
的东西StackPanel
.
这是XAML:
<StackPanel>
<TextBlock Text="{Binding Path=FirstName}" />
<TextBlock Text="{Binding Path=LastName}" />
<TextBlock Text="{Binding Path=Phone}" />
<TextBlock Text="{Binding Path=Email}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
我读过这篇文章,但接受的答案对我不起作用:
<StackPanel>
<TextBlock Text="{Binding Path=FirstName}" />
<TextBlock Text="{Binding Path=LastName}" />
<TextBlock Text="{Binding Path=Phone}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding Path=Email}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
我在某个地方犯了错误,或者接受的答案是错的?我该怎么做才能实现目标?
我创建了一个类似于此的Person:
public class Person
{
public enum GenderType
{
Female,
Male
}
public string Name
{
get; set;
}
public GenderType? Gender
{
get; set;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我创建了将呈现Person类型对象的数据模板.
这是XAML代码:
<DataTemplate
x:Key="personTemplate"
DataType="{x:Type model:Person}">
<StackPanel>
<RadioButton
Content="Female"
IsChecked="{Binding Path=Gender,
Converter={StaticResource genderConverter},
ConverterParameter=???}"/>
<RadioButton
Content="Male"
IsChecked="{Binding Path=Gender,
Converter={StaticResource genderConverter},
ConverterParameter=???}"/>
<RadioButton
Content="Not specified"
IsChecked="{Binding Path=Gender,
Converter={StaticResource genderConverter},
ConverterParameter=???}"/>
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
当然???
代码中的s不起作用:)问题是我想创建一个genderConverter
转换器,它将比较给定值,即与参数中提供personObject.Gender
的给定Person.GenderType
值相比较,true
如果值匹配则返回.
我不知道如何使转换器参数通过Person.GenderType.Female
,Person.GenderType.Male
并且分别null
对于第一,第二和第三单选按钮.
我想创建一个包含一个组合框和一个内容控件的用户控件.在组合框中进行的选择应确定内容控件将使用的数据模板.我读过这篇文章,它几乎展示了我想要实现的目标.
组合框中填充了enum ModelType
值,可以是Person
或Company
.如果用户选择Person
,内容控件应使用personTemplate
数据模板; 并companyTemplate
为Company
.
我对内容控件的XAML代码感到困惑.这是我创建的但我不能使它工作:
<UserControl.Resources>
...
<DataTemplate x:Key="personTemplate" ...>
<DataTemplate x:Key="companyTemplate" ...>
...
</UserControl.Resources>
...
<ContentControl x:Name="Account">
<ContentControl.ContentTemplate>
<DataTemplate>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding AccountType}" Value="Person">
<!-- I doubt the Value property is set correctly. -->
<!-- It should be a value of an enum ModelType -->
<Setter
TargetName="Account"
Property="ContentTemplate"
Value="{StaticResource personTemplate}" />
<!-- The setter is unaware of the target name, i.e. content control …
Run Code Online (Sandbox Code Playgroud) 我想创建一个接收任何文件的方法,并将其作为0和1的数组读取,即它的二进制代码.我想将该二进制代码保存为文本文件.你能帮助我吗?谢谢.
我刚开始学习MVVM.我通过遵循这个MVVM教程从头开始制作应用程序(我强烈推荐给所有MVVM初学者).基本上,我到目前为止创建的是一些文本框,其中用户添加他或她的数据,一个按钮来保存该数据,随后使用所有条目填充ListBox.
这就是我陷入困境的地方:我希望能够双击ListBoxItem并触发我创建并添加到ViewModel的命令.我不知道如何完成XAML方面,即我不知道如何将该命令绑定到ListBox(Item).
这是XAML:
...
<ListBox
Name="EntriesListBox"
Width="228"
Height="208"
Margin="138,12,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemsSource="{Binding Entries}" />
...
Run Code Online (Sandbox Code Playgroud)
这是ViewModel:
public class MainWindowViewModel : DependencyObject
{
...
public IEntriesProvider Entries
{
get { return entries; }
}
private IEntriesProvider entries;
public OpenEntryCommand OpenEntryCmd { get; set; }
public MainWindowViewModel(IEntriesProvider source)
{
this.entries = source;
...
this.OpenEntryCmd = new OpenEntryCommand(this);
}
...
}
Run Code Online (Sandbox Code Playgroud)
最后,这是我想在用户双击EntriesListBox中的项目后执行的OpenEntryCommand:
public class OpenEntryCommand : ICommand
{
private MainWindowViewModel viewModel;
public OpenEntryCommand(MainWindowViewModel viewModel)
{
this.viewModel = viewModel;
}
public event …
Run Code Online (Sandbox Code Playgroud) 当创建一个新的WPF应用程序项目MainWindow.xaml
,App.xaml
及其对应的隐藏类代码自动生成.在App.xaml
这里有一个属性,它定义了最初要运行的窗口以及默认的窗口StartupUri="MainWindow.xaml"
我Dispatcher
在同一个项目中创建了一个新类.在启动时,我希望Dispatcher
构造该类的实例,然后运行其中一个方法.该方法实际上会创建并显示MainWindow
窗口.那么我该如何修改App.xaml
或App.xaml.cs
为了实现它呢?或者,如果无法完成App
,我该如何实施呢?谢谢.
我有一节课:
public class AccountDetail
{
public DetailScope Scope
{
get { return scope; }
set { scope = value; }
}
public string Value
{
get { return this.value; }
set { this.value = value; }
}
private DetailScope scope;
private string value;
public AccountDetail(DetailScope scope, string value)
{
this.scope = scope;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
和一个枚举:
public enum DetailScope
{
Private,
Business,
OtherDetail
}
Run Code Online (Sandbox Code Playgroud)
最后,我有一个.xaml文件:
<Window x:Class="Gui.Wpf.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test"
SizeToContent="WidthAndHeight">
<Grid>
<ComboBox
Name="ScopeComboBox"
Width="120"
Height="23"
Margin="12" /> …
Run Code Online (Sandbox Code Playgroud) 有没有办法TextBlock
在左侧指定文本修剪?
我已经设法完成三个场景中的两个(第三个是我需要的场景):
定期修剪
<TextBlock
VerticalAlignment="Center"
Width="80"
TextTrimming="WordEllipsis"
Text="A very long text that requires trimming" />
// Result: "A very long te..."
Run Code Online (Sandbox Code Playgroud)左修剪
<TextBlock
VerticalAlignment="Center"
Width="80"
FlowDirection="RightToLeft"
TextTrimming="WordEllipsis"
Text="A very long text that requires trimming." />
// Result: "...A very long te"
Run Code Online (Sandbox Code Playgroud)左边修剪文本末尾的位置
// Desired result: "...uires trimming"
Run Code Online (Sandbox Code Playgroud)有谁知道这是否可能?谢谢.
我有一个Border
与CornerRadius
属性设置为10,这里面Border
,有一个StackPanel
.该面板包含两个Border
分别带有蓝色和红色背景的s.
蓝色边框的左上角和右上角以及红色边框的左下角和右下角都伸出第一个边框的弯曲边缘.我希望将蓝色和红色边框修剪到父边框.那可能吗?
顺便说一下,我知道如果我为CornerRadius
蓝色和红色边框的属性设置相同的值,它将遵循第一个的曲线.我不希望这样 - 我想要修剪.谢谢!
<Border
Width="200"
Height="200"
BorderThickness="1"
BorderBrush="Black"
CornerRadius="10">
<StackPanel>
<Border Height="100" Background="Blue" />
<Border Height="100" Background="Red" />
</StackPanel>
</Border>
Run Code Online (Sandbox Code Playgroud) wpf ×9
xaml ×5
c# ×3
binding ×2
.net ×1
binary ×1
combobox ×1
converter ×1
data-binding ×1
mvvm ×1
silverlight ×1
startup ×1
texttrimming ×1
triggers ×1