我有一个TreeView,我正在尝试实现一种样式,允许我使用HierarchicalDataTemplate.在特定节点的所有子节点周围放置边框.我想要的一个例子如下所示:

以下代码是我到目前为止的代码.
<HierarchicalDataTemplate DataType="{x:Type model:Node}" ItemsSource="{Binding Children, Mode=OneWay}">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
//what goes in here???
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
我需要添加什么来实现我想要的边框?
我想在屏幕上显示一个数字.如果该数字为0,我根本不希望它显示.
<TextBlock Text="{Binding Path=Class.Count}" FontSize="20" FontWeight="Bold">
<TextBlock.Triggers>
<DataTrigger Binding="{Binding Path=Class.Count}" Value="0">
<Setter Property="TextBlock.Text" Value=""/>
</DataTrigger>
</TextBlock.Triggers>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
在常规触发器无法解决我的问题后,我尝试了上面的代码.我不想写一个转换器来处理一个特定的数字.有没有办法创建一个触发器,如果它是0,将隐藏数字?
编辑:当我尝试使用常规触发器或数据触发器时,我得到一个xaml解析错误,告诉我需要使用事件触发器.
我试图将setter中的值设置为一个数字,以确保具有空值不会导致问题
我使用以下列名和数据类型向数据库添加了一个表
"ID"bigInt,"描述"nchar(11)
如果我检查表的设计视图,列的数据类型就像我设置它们一样.
如果我编写的查询将从SYS.COLUMNS获取该表中的列,则列属性不同,例如(描述的max_length为22,而不是11)
有人可以解释为什么会这样吗?
我正在使用Microsoft SQL Server企业版(64位),如果这是相关的.
我正在为我的数据访问层编写单元测试。为了实现这一点,我为 SqlCommand (ISqlCommand) 创建了一个包装器,以便我可以模拟它的功能。
ISqlCommand command = _connection.GetSqlCommand(sqlCommand);
Run Code Online (Sandbox Code Playgroud)
在我正在测试的方法之一中,调用了 SqlCommand 的 ExecuteReader 方法,我必须返回一个 SqlDataReader。
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow);
Run Code Online (Sandbox Code Playgroud)
在这个相同的方法 reader.Read 将被调用
if (reader.Read())
{
someVariable = reader.GetString(1);
}
Run Code Online (Sandbox Code Playgroud)
我想要的是能够从模拟的 command.ExecuteReader() 返回一个 SqlDataReader 对象,并提供一个值供我阅读。可以做到吗?似乎 SqlDataReader 只能从正在运行并返回 SqlDataReader 的实际 SqlCommand.ExecuteReader 实例化。待测试的完整相关代码。
ISqlCommand command = _connection.GetSqlCommand(sqlCommand);
using (command)
{
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow);
if (reader.Read())
{
dbVersion = reader.GetString(1);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:清除我在问什么。SqlDatareader 没有公共构造函数。据我所知,我无法使用该类编写任何测试,因为我无法在不使用 SqlCommand 对数据库进行合法调用的情况下实例化它。即使尝试创建 SqlDataReaderWrapper 的接口也无济于事,因为问题是一样的。我不是要编写集成测试(对数据库进行实际调用),因此 DataReader 似乎无法按原样进行测试。我的问题是,在这种情况下,我可以做些什么来将值放入 SqlDataReader 中?
我有一个方法将文本附加到文件.在我附加文本之前,我检查文件是否存在.如果它不存在我创建它然后继续如下所示.
if(!File.Exists(_someFile))
File.Create(_someFile);
using (StreamWriter file = File.AppendText(_someFile))
{
file.WriteLine("some text");
}
Run Code Online (Sandbox Code Playgroud)
如果文件存在则没有问题.该文件将被更新.如果该文件不存在并且它被创建,则在使用'using'的行上抛出IO异常,表明另一个进程正在使用该文件.我尝试使用进程资源管理器来找出使用该文件的内容,结果是"不存在的进程".有谁知道发生了什么以及如何解决这个问题?
编辑:问题解决了
我第一次搜索时在这个网站上找不到关于我的问题的问题.我一发布问题,就在右边的"相关问题"中看到了确切的问题.链接到解决方案:使用File.Create()后由另一个进程使用的文件 很抱歉发布了一个副本.我的问题解决了.
我想知道如何从集合中将用户控件添加到窗口中.目前我将我的视图文件夹中的控件添加到网格单元格中.
<views:MyControl Grid.Column="0" Grid.Row="0" Margin="10"/>
Run Code Online (Sandbox Code Playgroud)
我的视图模型中有一个ObservableCollection,它存储了一组用户控件.在我看来,我想从该集合中取一个控件并将其放入我的网格单元格中.我怎样才能像上面那样在网格中添加控件,但是从我的收藏中添加?
例如,{绑定路径控件.[1]