有 2 个段 [x1; x2] 和 [y1; y2],如何最有效地确定它们相交?
Андрей NOP's questions
我将文件的内容发送到服务器:
$uri = ...
$headers = @{
...
"Content-Type" = "application/json"
}
[string] $content = Get-Content .\filename -Encoding utf8 -Raw
$body = @{
...
"content" = $content
} | ConvertTo-Json
$response = Invoke-WebRequest $uri -Method 'PUT' -Headers $headers -Body $body
但是所有非 ascii 字符都被更改为相似的 ascii 或问题
我怎样才能逃脱他们?
我阅读了文档并且知道 cmdlet 参数-EscapeHandling
,但ConvertTo-Json
它适用于 PowerShell 6.2,但我有 5.1 版
在输入有一些(连续)轴(数字或时间,没关系)的段列表,每个段由一对(有序)坐标表示 - 开始和结束(这些点也属于部分)。
有必要合并所有相交的线段并在输出处获得一个没有交点的线段列表(但这个新列表不应包含不在输入线段中的点)。
例如,我们在输入处有:
[1; 5]
[2; 4]
[7; 9]
[3; 6]
那么输出应该是:
[1; 6] // здесь слиты [1; 5], [2; 4], [3; 6]
[7; 9]
实现了这样的算法:
function merge(segments) {
while (true) {
const newSegments = [];
for (const x of segments) {
let found = false;
for (const y of newSegments) {
if (x.end >= y.start && x.start <= y.end) {
y.start = Math.min(y.start, x.start);
y.end = Math.max(y.end, x.end);
found = true;
break;
}
}
if (!found) newSegments.push(x);
}
if (segments.length == newSegments.length) break;
segments = newSegments;
}
return segments;
}
function print(segments) {
console.log(segments.map(s => `[${s.start}; ${s.end}]`).join(' '));
}
let segments = [
{ start: 1, end: 5 },
{ start: 2, end: 4 },
{ start: 7, end: 9 },
{ start: 3, end: 6 }
];
print(segments);
print(merge(segments));
它有效,但具有 O(n³) 复杂性。
有没有可能写出更好的解决方案?
有一个思路:对输入列表进行排序,并以某种方式适配扫描线方式;但我仍然无法弄清楚如何实现它。
有两个项目的解决方案:第一个是库,第二个是启动应用程序。
第一个项目的链接已添加到第二个项目。
第一个项目中添加了一个 nuget 包,其中包含一些本机库。
问题:在构建项目时,这些原生库没有复制到 SECOND 项目的输出文件夹中。
第一个项目的输出文件夹有这些库,如果您手动将它们复制到第二个项目的输出文件夹,应用程序可以正常工作。
如何确保自动复制所有库?
Oracle Database 11g 企业版 11.2.0.4.0 - 64 位生产
有一个巨大的 XML,您需要在服务器端从中取出一些数据。我将 XML 加载到 XmlType 并使用 XPath 获取必要的数据。例如:
declare
xml XmlType;
begin
xml := XmlType('
<xml>
<a>
<b>0</b>
<c>1</c>
<d>
<e>2</e>
<e>3</e>
<e>4</e>
</d>
<d>
<e>5</e>
<e>6</e>
<e>7</e>
</d>
<d>
<e>8</e>
<e>9</e>
</d>
</a>
</xml>');
:r0 := xml.extract('//xml/a/b/text()').getStringVal();
:r1 := xml.extract('//xml/a/c/text()').getStringVal();
:r2 := xml.extract('//xml/a/d[1]/e[1]/text()').getStringVal();
end;
单个元素没有问题,它们通常被提取,但是重复的呢?如上面的示例,我有一个未知数量的元素d
,每个元素都包含未知数量的元素e
,我需要依次提取每个元素并在其上执行一些服务器方法。
我可以通过索引访问,但我不知道如何获取这些元素的数量,我知道 XPath 有一个内置函数count
,但我不明白如何使用它以及我的数据库是否支持它。
尝试调用类似这样xml.extract('count(//xml/a/d)')
的内容会导致消息“不支持指定的 XPATH 表达式”。
访问不存在的索引时,发生异常SELF_IS_NULL
,您可以以某种方式使用它吗?虽然,当然,我不想在异常上建立逻辑......
有一个带有分层数据的表(OKATO代码)并且有这样一个查询:
select ...,
e.idOKATO,
...
from MyEntity e
现在出现了一个要求 - 不显示分层实体的 id,而是显示其某些祖先(在树中)的 id。我写了这个递归查询:
select okato.id
from ( select o.id
from MyOkato o
connect by (prior o.idParent = o.id and length(o.sCode) >= 5)
start with o.id = :idOKATO
order by rownum desc) okato
where rownum = 1
它可以正常工作 - 当替换而不是:idOKATO
后代的 id 时,它会显示我需要的祖先的 id。
但是,现在,当将此查询作为第一个查询的子查询时:
select ...,
(select okato.id
from ( select o.id
from MyOkato o
connect by (prior o.idParent = o.id and length(o.sCode) >= 5)
start with o.id = e.idOKATO
order by rownum desc) okato
where rownum = 1) as idOKATO,
...
from MyEntity e
发生错误:
ORA-00904: "E"."IDOKATO": 标识符无效
怎么修?
上下文 - 这个问题:按 DayOfWeek 排序,星期从星期一开始
我想重构排序代码,而不是难以理解的 lambda
s => ((int)s.DayOfWeek + 6) % 7
写类似的东西
s => GetDayNumberInWeek(s.DayOfWeek, weekStartsWith: DayOfWeek.Monday)
事实证明,表达式树不支持命名参数,即 将不得不写得不太清楚:
s => GetDayNumberInWeek(s.DayOfWeek, DayOfWeek.Monday)
就这样吧,但是怎么做呢?如果你写
static int GetDayNumberInWeek(DayOfWeek dayOfWeek, DayOfWeek weekStartsWith)
{
int daysInWeek = 7;
return ((int)dayOfWeek + daysInWeek - (int)weekStartsWith) % daysInWeek;
}
当然,这种排序将开始在客户端执行,但这是不可取的。
如果我从该方法返回任何Expression
内容,那么 EF 会发誓缺乏实现IComparable
。
这个问题有解决方案吗?
有一层砖砌,测量 N 乘 M 个单元。一块砖正好占据两个相邻的单元格。需要计算在下一层砌体中放置砖块的选项之一。
限制:新层的砖块不能与上一层砖块的位置完全重合。
输入是一个 NxM 矩阵,表示一个砌体层,其中填充有从 1 到 NxM/2 的数字对,其中每对数字代表一块砖。
样本输入和样本响应:
那些。在输入矩阵处:
{
{ 1, 1, 2, 2, 3, 3, 4, 4 },
{ 5, 5, 6, 6, 7, 7, 8, 8 },
{ 9, 9, 10, 10, 11, 11, 12, 12 },
{ 13, 13, 14, 14, 15, 15, 16, 16 },
}
在出口处:
{
{ 1, 2, 3, 4, 5, 6, 7, 8 },
{ 1, 2, 3, 4, 5, 6, 7, 8 },
{ 9, 10, 11, 12, 13, 14, 15, 16 },
{ 9, 10, 11, 12, 13, 14, 15, 16 },
}
检查层正确性的测试方法:
public bool CheckLayers(int n, int m, int[,] current, int[,] previous)
{
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
if (i < n - 1
&& current[i, j] == current[i + 1, j]
&& previous[i, j] == previous[i + 1, j]) return false;
if (j < m - 1
&& current[i, j] == current[i, j + 1]
&& previous[i, j] == previous[i, j + 1]) return false;
}
}
return true;
}
我使用标准方式存储应用程序设置Properties\Settings.settings
设置沿以下路径放置在文件中:%LOCALAPPDATA%\MyApp\MyApp.exe_Url_l2acnwn1eoostrlvwy2ik02hnoqwsfuq\1.0.0.0\user.config
应用程序的名称从何而来MyApp
,如何在代码中获取?
我尝试更改设置Assembly name
- 仅更改了一部分MyApp.exe_Url_l2acnwn1eoostrlvwy2ik02hnoqwsfuq
,但MyApp
没有更改。
我试图编辑Title
并Product
输入Assembly Information
- 无济于事,只有应用程序的属性发生了变化,设置的路径没有改变。
当您更改应用程序的版本时,Assembly Information
只有负责版本更改的路径部分(逻辑上):1.0.0.0
我与第三方服务交换文件。所有文档均为 XML 格式。如果出现问题,该服务还会使用特殊的 XML 格式报告错误(我有它的 xsd 模式)。有很多文档格式,但是对于每个请求,我确切地知道响应将具有什么格式(如果没有错误)。
我写了以下方法来检查请求是否成功:
void CheckErrorSchema(string text)
{
var settings = new XmlReaderSettings { ValidationType = ValidationType.Schema };
using (var sr = new StringReader(Properties.Resources.ErrorSchema)) // xsd-схема сообщения об ошибке
using (var xr = XmlReader.Create(sr))
settings.Schemas.Add(null, xr);
using (var sr = new StringReader(text))
using (var xr = XmlReader.Create(sr, settings))
{
try
{
var doc = XDocument.Load(xr);
throw new MyException(...);
}
catch (XmlSchemaValidationException) { }
}
}
那些。收到响应后,我调用这个方法,如果它运行正常,那么我将响应反序列化为我需要的格式。
我不喜欢这样,现在我正在加载一个文档,如果它的加载引发异常,那么我会抑制它,我认为一切都很好。如果文件加载没有问题,那么我会抛出异常。错误非常罕见(约占案例的 1%)。
如何优化?
有一个电子文件管理系统。数据交换是使用具有以下结构的 XML 完成的:
<document>
<tag1 value="1"/>
<tag2 value="text"/>
<tag3 value="01.01.2017 10:20:15"/>
<tag4 value="2"/>
<tag5 value="02.02.2017 20:30:45"/>
<tag6 value="text too"/>
<tag7 value="3.5"/>
<outerTag1>
<innerTag11 value="5"/>
<innerTag12 value="some text"/>
<innerTag13 value="some text"/>
<innerTag14 value="7"/>
<innerTag15 value="8"/>
<innerTag16 value="6"/>
<innerOuterTag11>
<innerInnerTag111 value="text"/>
<innerInnerTag112 value="03.03.2017 03:03:03"/>
</innerOuterTag11>
</outerTag1>
<outerTag2>
<innerTag21 value="text"/>
<innerTag22 value="text"/>
<innerTag23 value="text"/>
<innerTag24 value="text"/>
<innerTag25 value="text"/>
<innerTag26 value="text"/>
</outerTag2>
</document>
问题就在眼前——你需要一堆具有这种结构的类:
[XmlRoot(ElementName="tag1")]
public class Tag1
{
[XmlAttribute(AttributeName="value")]
public int Value { get; set; }
}
接着:
[XmlRoot(ElementName="document")]
public class Document
{
[XmlElement(ElementName="tag1")]
public Tag1 Tag1 { get; set; }
[XmlElement(ElementName="tag2")]
public Tag2 Tag2 { get; set; }
[XmlElement(ElementName="tag3")]
public Tag3 Tag3 { get; set; }
[XmlElement(ElementName="tag4")]
public Tag4 Tag4 { get; set; }
[XmlElement(ElementName="tag5")]
public Tag5 Tag5 { get; set; }
[XmlElement(ElementName="tag6")]
public Tag6 Tag6 { get; set; }
[XmlElement(ElementName="tag7")]
public Tag7 Tag7 { get; set; }
[XmlElement(ElementName="outerTag1")]
public OuterTag1 OuterTag1 { get; set; }
[XmlElement(ElementName="outerTag2")]
public OuterTag2 OuterTag2 { get; set; }
}
我想改为编写一个具有简单类型属性的类:
[XmlRoot(ElementName="document")]
public class Document
{
[...(ElementName="tag1")]
public int Tag1 { get; set; }
[...(ElementName="tag2")]
public string Tag2 { get; set; }
[...(ElementName="tag3")]
public DateTime Tag3 { get; set; }
[...(ElementName="tag4")]
public int Tag4 { get; set; }
[...(ElementName="tag5")]
public DateTime Tag5 { get; set; }
[...(ElementName="tag6")]
public string Tag6 { get; set; }
[...(ElementName="tag7")]
public decimal Tag7 { get; set; }
[XmlElement(ElementName="outerTag1")]
public OuterTag1 OuterTag1 { get; set; }
[XmlElement(ElementName="outerTag2")]
public OuterTag2 OuterTag2 { get; set; }
}
而不是产生一堆像Tag1
, Tag2
, ...这样的小类
这可以以某种方式完成吗?理想情况下,我想制作一个自定义属性MyXmlElement
并使用它来代替XmlElement
,但是如何教XmlSerializer
理解它并生成相应的标记?或者也许还有其他方法?
假设我们有一个数组,例如:
int[,] array = { { 1, 2, 3 }, { 4, 5, 6 } };
所有的数组都是IEnumerable
(非泛型的)实现,所以在使用这个接口的时候,所有的元素都会被装箱?
这个问题是相关的,例如,在使用Linq
-operationsCast<T>()
或时OfType<T>()
:
Console.WriteLine(string.Join(" " , array.Cast<int>()));
某些软件“PROGRAM”安装在客户端PC上,“PROGRAM”可能有不同的版本,因此安装方式也不同。有一个文件有一定的扩展名“.XXX”,这个扩展名与“PROGRAM”相关联,即 在 Windows 资源管理器中双击此文件会打开包含文件内容的“程序”。在命令行中输入该文件的路径也会打开“PROGRAM”。这里一切都很好。
现在的任务:您需要在“PROGRAM”中打开一个扩展名为“.XXX”的特定文件,但带有一个附加参数(已知)。
如何使用命令行来做到这一点?
如果这是不可能的,我可以编写一个应用程序 (C#),它将获取与注册表中某处的“.XXX”扩展名关联的程序的路径并运行它,但前提是这不需要任何特权。
操作系统:Windows 7 SP1
重现问题的示例:
Notepad++已安装,它与“.TXT”文本文件相关联,它还有一个-ro
以只读模式打开文件的选项。应用程序本身的路径是未知的。
如果我在命令行输入
"C:\Program Files\Notepad++\notepad++.exe" "C:\Users\User\Desktop\1.txt"
然后文件正常打开
如果我输入:
"C:\Program Files\Notepad++\notepad++.exe" "C:\Users\User\Desktop\1.txt" -ro
然后进入只读模式。
但是我不知道路径“C:\Program Files\Notepad++\notepad++.exe”,所以我这样打开它:
"C:\Users\User\Desktop\1.txt"
文件正常打开
如果我输入:
"C:\Users\User\Desktop\1.txt" -ro
文件仍然正常打开
如何以只读模式打开文件,但可执行文件的路径未知。更改文件关联对我不起作用。
有一个所有交易对手的列表Contractors
,有一个合作伙伴列表Partners
,第二个列表是第一个列表的子集,这两个属性都可用VM
。
In View
is ItemsControl
withCheckBox'ами
其中包含交易对手列表:
<ItemsControl ItemsSource="{Binding Contractors}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}">
...
</CheckBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我现在需要选中所有合作伙伴的复选框:
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource CheckPartnersConverter}">
<Binding Mode="OneWay"/>
<Binding Path="DataContext.Partners"
RelativeSource="{RelativeSource FindAncestor, AncestorType=ItemsControl}"/>
</MultiBinding>
</CheckBox.IsChecked>
在转换器中实现了该方法Convert
:
class CheckPartnersConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values[1] is List<Contractor> partners && values[0] is Contractor c)
return partners.Contains(c);
return false;
}
好的,这似乎有效。
现在如何实现反向转换,甚至有可能实现它?
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
var res = new object[]
{
Binding.DoNothing,
Binding.DoNothing
};
return res;
}
}
如果这不可能,我准备放弃带有复选框的演示文稿并替换它,例如,ListBox
只选择合作伙伴,但击败SelectionMode="Multiple"
也没有问题SelectedItems
在开发WPF
MVVM
应用程序时,我们在标记中XAML
无处不在Binding
,如何IntelliSense
在输入属性名称时以提示的形式获得开发便利VM
?毕竟,如果我们至少在一个字符上出错,绑定将不起作用,所以我们经常需要在项目文件之间切换和复制名称(如果我们VM
已经将其编译成库,我们没有源代码吗?)。
如果在标记中指定如下内容:
<Window.DataContext>
<local:MainVM/>
</Window.DataContext>
(并组织一个项目)然后IntelliSense
开始提供帮助。
但我想成为一名优秀的开发人员,并且根据建议,我不想产生这种依赖(这对我来说通常很清楚)。
您知道和/或使用什么方法在这种情况下启用提示(如果有的话)?
我读了 Robert Martin 并试图理解重构的所有复杂之处。
如果使用 C# 代码一切都或多或少地清晰,并且代码逐渐开始令人赏心悦目,那么 XAML 则一切都令人难过。标记很繁琐且难以阅读。很明显,很多与 xml-“遗传”有关。xml是多余的,不太顺眼,但还是。什么是重构 xaml 的方式和谁使用什么?
理想情况下,我想摆脱十级层次结构并获得 5-7 行的简短“方法”(就像我在 c# 代码中所做的那样)。
这是我上一个 WPF 应用程序的其中一个窗口的标记(所有 320 行碎肉):
<Window x:Class="InfoReceiverB.Views.EditorWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:InfoReceiverB.Views"
mc:Ignorable="d"
Title="Менеджер скриптов" Icon="/papers2.ico"
WindowStartupLocation="CenterScreen"
Height="700" Width="1100">
<Grid Margin="3">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ListBox Padding="2.5" Margin="3"
ItemsSource="{Binding Repo.Queries}"
SelectedItem="{Binding SelectedQuery}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Id}" Margin="0,0,2,0"/>
<TextBlock Text="{Binding Caption}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Column="1"
Margin="0,3,3,3">
<Button Content="+"
Padding="5" Margin="0,0,0,3"
Command="{Binding AddQueryCommand}"/>
<Button Content="-"
Padding="5" Margin="0,0,0,3"
Command="{Binding DelQueryCommand}"
CommandParameter="{Binding SelectedQuery}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="CommandParameter" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</Grid>
<GridSplitter Grid.Row="1" Height="3"
HorizontalAlignment="Stretch"
Background="DarkGray" Margin="3,0"/>
<Grid Grid.Row="2" DataContext="{Binding SelectedQuery}">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<Trigger Property="DataContext" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Id}"
Padding="5" Margin="3,3,0,3"/>
<TextBox Grid.Column="1"
Text="{Binding Caption}"
Padding="5" Margin="0,3,3,3"
AcceptsReturn="True"/>
<TextBox Grid.Row="1" Grid.ColumnSpan="2"
Text="{Binding Body}"
FontFamily="Consolas" FontSize="14"
Padding="5" Margin="3,0,3,3"
AcceptsReturn="True" AcceptsTab="True"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"/>
</Grid>
</Grid>
<GridSplitter Grid.Column="1" Width="3"
HorizontalAlignment="Stretch"
Background="DarkGray" Margin="0,3"/>
<Grid Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ListBox Padding="2.5" Margin="3"
ItemsSource="{Binding Repo.QueryPacks}"
SelectedItem="{Binding SelectedQueryPack}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Id}" Margin="0,0,2,0"/>
<TextBlock Text="{Binding Caption}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Column="1"
Margin="0,3,3,3">
<Button Content="+"
Padding="5" Margin="0,0,0,3"
Command="{Binding AddQueryPackCommand}"/>
<Button Content="-"
Padding="5" Margin="0,0,0,3"
Command="{Binding DelQueryPackCommand}"
CommandParameter="{Binding SelectedQueryPack}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="CommandParameter" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</Grid>
<GridSplitter Grid.Row="1" Height="3"
HorizontalAlignment="Stretch"
Background="DarkGray" Margin="3,0"/>
<Grid Grid.Row="2" DataContext="{Binding SelectedQueryPack}">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<Trigger Property="DataContext" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Id}"
Padding="5" Margin="3,3,0,3"/>
<TextBox Grid.Column="1"
Text="{Binding Caption}"
Padding="5" Margin="0,3,3,3"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox Name="list1" Padding="2.5" Margin="3"
ItemsSource="{Binding DataContext.Repo.Queries,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Id}" Margin="0,0,2,0"/>
<TextBlock Text="{Binding Caption}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Column="1"
Margin="0,3" VerticalAlignment="Center">
<Button Content=">"
Padding="5" Margin="0,0,0,3"
Command="{Binding DataContext.AddQueryToPackCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
CommandParameter="{Binding SelectedItem, ElementName=list1}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="CommandParameter" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button Content="<"
Padding="5" Margin="0,7,0,3"
Command="{Binding DataContext.DelQueryFromPackCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
CommandParameter="{Binding SelectedItem, ElementName=list2}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="CommandParameter" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button Content="^"
Padding="5" Margin="0,0,0,3"
Command="{Binding DataContext.UpQueryInPackCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
CommandParameter="{Binding SelectedItem, ElementName=list2}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="CommandParameter" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button Content="v"
Padding="5" Margin="0,0,0,3"
Command="{Binding DataContext.DownQueryInPackCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
CommandParameter="{Binding SelectedItem, ElementName=list2}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="CommandParameter" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
<ListBox Grid.Column="2" Name="list2"
Padding="2.5" Margin="3"
ItemsSource="{Binding Queries}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Id}" Margin="0,0,2,0"/>
<TextBlock Text="{Binding Caption}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Grid>
</Grid>
</Grid>
<UniformGrid Grid.Row="1" HorizontalAlignment="Right"
Rows="1">
<Button Grid.Column="1"
Content="Применить" IsDefault="True"
Padding="5" Margin="0,3,3,3"
Command="{Binding ApplyCommand}"
Click="ApplyButtonClick"/>
<Button Grid.Column="2"
Content="Отмена" IsCancel="True"
Padding="5" Margin="0,3,3,3"/>
</UniformGrid>
</Grid>
</Window>
我很高兴收到任何建议和评论,尤其是示例
有一台矩阵损坏的三星笔记本电脑LTN156AT19
。矩阵可以换成别的模型吗?笔记本电脑很旧,我不想为了同样的矩阵放弃 5.5k。有些型号的特性相似,但便宜 2 倍,例如:LTN156AT39
,,LTN156AT30
LTN156AT35
有以下标记:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="2.5">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Padding="5"
Text="{Binding Name}"/>
<TextBlock Grid.Column="1"
Padding="5"
Text="{Binding Weight}"/>
<Rectangle Grid.ColumnSpan="2" Panel.ZIndex="-1"
Fill="LightGreen" HorizontalAlignment="Left"
Width="..."/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Here Items
- 特定的元素集合,按降序排列Weight
。我想要的:放在TextBlock'и
绿色矩形下方,但使其宽度与 value 成正比Weight
,并且 100% 取一个更大的值(它将是第一个)。Width
我草拟了模板,但我不知道要在属性中输入什么。这里有必要首先考虑到这 100% 显然是未知的,其次,宽度Grid
可以是任意的。
我画了我想要得到的:
有一个由生成的表ASP.NET
:
<asp:Repeater ItemType="..." SelectMethod="..." runat="server">
<ItemTemplate>
<tr class="table" onmouseover="this.style.backgroundColor='#DDD'"
onmouseout="this.style.backgroundColor='white'" onclick="location.href='/item/<%#: Item.Id %>'">
<td><%#: Item.Id %></td>
<td><%#: Item.... %></td>
<td><%#: Item.... %></td>
<td><%#: Item.... %></td>
<td>
<table>
<tbody>
<tr>
<td><a href="/item/<%#: Item.Id %>">Открыть</a></td>
<td><a href="/blank/<%#: Item.Id %>" target="_blank">Печать</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
在此处的帮助下JavaScript
,单击行中的任意位置时将实现一个链接,除最后一列外,一切正常。
在表格的最后一列中有一个单独的链接用于打印表格,表格在新选项卡中打开。表单正常打开,但同时在当前选项卡中,链接来自JS
. 如何删除JS
表格最后一列的操作?