我在主窗口中有以下代码(缩写):
虽然我设置了滚动条可见性和CanContentScroll属性,但它不会滚动.我认为它与我的用户控件有关.
<Window>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TabControl Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch" Height="Auto" Width="Auto">
<TabItem Header="TEST">
<ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<my:MY_USER_CONTROL x:Name="myUserControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.CanContentScroll="True" />
</ScrollViewer>
</TabItem>
</TabControl>
<Button Grid.Column="0" Grid.Row="2" >a button</Button>
<WrapPanel Grid.Column="0" Grid.Row="3" >
</WrapPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我的用户控件的缩写结构:
<UserControl>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="183*" />
<ColumnDefinition Width="117*" />
</Grid.ColumnDefinitions>
<TreeView ItemsSource="{Binding Children}" Grid.ColumnSpan="2">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" …Run Code Online (Sandbox Code Playgroud) 我想在WPF中使用TreeViews可视化以下数据结构:
class MyDataContext
{
ICollectionView Outers {get;set;}
//...
}
class Outer
{
string Name {get;set;}
IEnumberable<Inner> Actions {get;set;}
}
class Inner
{
string Description {get;set;}
Command OnClick {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的尝试:
<!-- DataContext is MyDataContext at this point -->
<TreeView ItemsSource="{Binding Path=Outers}">
<TreeView.Resources>
<DataTemplate DataType="{x:Type myns:Outer}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}"/>
<TreeView ItemsSource="{Binding Path=Actions}" >
<DataTemplate DataType="{x:Type myns:Inner}">
<Button Command={Binding Path=OnClick}>
<TextBlock Text="{Binding Path=Description}"/>
</Button>
</DataTemplate>
</TreeView>
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
由于我得到以下信息,因此访问此类访问有问题InvalidOperationException:
Operation is not valid while ItemsSource is …Run Code Online (Sandbox Code Playgroud) 我有一系列应用程序,它们提供了一组可扩展(即非固定)变量,可供各种插件使用。
例子是:
插件可以使用这些的任意组合。
示例插件可以是:
我想要实现的是
一个好处是允许插件可选地需要一个变量,例如一个插件需要 4. 并且可选地使用 3. 如果可用(但也可用其他情况)。
我想实现某种“动态依赖注入”。让我用一个用例来解释它。
我正在构建一组将用于一系列应用程序的库。每个应用程序都可以提供一组不同的变量,这些变量可供某些需要这些变量的“处理程序”使用。根据具体的可用变量,必须确定可用处理程序的数量,因为处理程序只有在可以访问所有必需变量时才能使用。此外,我正在寻找一种使调用尽可能安全的方法。编译时可能是不可能的,但是“检查一次,之后永远不会失败”就可以了。
下面是第一张草图。在这个阶段,一切都还可以改变。
class DynamicDependencyInjectionTest
{
private ISomeAlwaysPresentClass a;
private ISomeOptionalClass optionA;
private ISomeOtherOptionalClass optionB;
private ISomeMultipleOption[] multi;
private IDependentFunction dependentFunction;
void InvokeDependency()
{
// the number of available dependencies varies.
// some could be guaranteed, others are optional, some maybe have several instances
var availableDependencies = new IDependencyBase[] {a, optionA, optionB}.Concat(multi).ToArray(); …Run Code Online (Sandbox Code Playgroud) 我想单元测试一个返回a的函数Result(见下文).
我的问题是:如何轻松检查结果在数值上是否等于预期值?
这是完全匹配的版本.
type QuadraticResult =
| ComplexResult of Complex * Complex
| DoubleResult of float
| TwoResults of float * float
type Result=
| QuadraticResult of QuadraticResult
| LinearResult of LinearFormulaSolver.Result
/// Solves a x² + bx + c = 0
let Compute (a,b,c) : Result =
[<Fact>]
member test.``the solution for x² = 0.0 is a double 0.0`` ()=
let result = Compute (1.0, 0.0, 0.0)
let expected = Result.QuadraticResult (DoubleResult 0.0)
// only exact match, …Run Code Online (Sandbox Code Playgroud) 我想挑选从分支到另一个分支的单一提交.我希望文件重命名很常见,但仍希望能够在没有人为干预的情况下应用更改.
由于内置的cherry-pick命令没有接缝来检测重命名(至少在我的测试用例中),特别是与修改重命名的文件结合使用时.
我尝试了一下,最后想出了一个涉及两个rebase操作的解决方案.
让我们假设我有一个名为target的分支指向我想要应用cherry-pick的提交.我想要挑选的提交由名为source的分支指向.
然后我执行以下命令:
git rebase --strategy="recursive" --strategy-option="rename-threshold=30" target sourceTemp (可能使用另一个阈值;测试文件非常小,因此更改相对较大)git rebase --onto target sourceTemp~ sourceTemp这仅适用于分支源中最后一次提交引用到目标的更改.
我也把测试放在github上:
https://github.com/fraschfn/cherry-pick
我想知道的是,如果这种方法是可行的,或者只是在我简单的测试设置中有效的话!
更新:替代方法
我将补丁重新绑定到源和目标的合并基础:
开始的情况
A - B <--- target
/
M
\
C - D <--- source
Run Code Online (Sandbox Code Playgroud)
我想樱桃挑选D到B.
创建新的分支补丁后,将D重新映射到M上
A - B <--- target
/
M - D' <--- patch
\
C - D <--- source
Run Code Online (Sandbox Code Playgroud)合并C和D'以获取源代码
合并B和D'以获取目标的修补版本
A - B …Run Code Online (Sandbox Code Playgroud)与此问题类似:我如何需要一个方法参数来实现多个接口? 我想要一个方法参数来实现几个接口.
接口应以任意方式组合,我不想为每个有效组合创建接口.
想一个文件.有可能:
IReadableIWriteableIArchiveIGenerated...
如果我想表达一个参数需要是一个可写的,生成的存档我不想生成,IWritableGeneratedArchive因为有太多的组合,我想用它与一些我无法修改的现有类.
伪代码:
void WriteTo( IWritable + IGenerated + IArchive file)
{
//...
}
Run Code Online (Sandbox Code Playgroud) 我有一个WPF应用程序,其布局由顶层的3行组成Grid.
我希望中间行占用它所需的空间(它需要的最大空间是有限的,但取决于窗口的宽度).底行应占用剩余空间.棘手的部分是顶行.它的大小可以根据按钮切换大部分内容的可见性而变化.我希望它最多使用50%的高度但不超过它真正需要的高度.以下XAML描述了我想要完成的任务:
<Grid.RowDefinitions>
<!-- neither "1*" nor "Auto" fully meets my needs -->
<RowDefinition Height="Min(1*,Auto)"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
Run Code Online (Sandbox Code Playgroud)
行是:
WrapPanelWrapPanelTextBox如果这很重要
我运行几个任务并将它们保存在列表中以检查它们是否已经完成.
我发现来自async方法RanToCompletion的任务总是显示为任务本身仍在运行.
Task在两种情况下,有没有办法从对象获取"完整"信息?
这是一个显示此行为的简单测试用例.我运行两个任务,有/没有async方法,并在完成期间和完成后检查状态.
private void test()
{
;
Action actionAsync = funcAsync;
Task taskAsync = Task.Run(actionAsync);
Action action = func;
Task task = Task.Run(action);
var statusAsync = taskAsync.Status;
var status = task.Status;
// stati are either WaitingToRun or Running
Thread.Sleep(TimeSpan.FromSeconds(2));
// Now it's quite certain, that both have started
var statusAsync2 = taskAsync.Status;
var status2 = task.Status;
Debug.Assert(statusAsync2 == TaskStatus.RanToCompletion);
Debug.Assert(status2 == TaskStatus.Running);
;
Thread.Sleep(TimeSpan.FromSeconds(12));
// Now it's quite certain, that both …Run Code Online (Sandbox Code Playgroud) c# ×5
wpf ×3
cherry-pick ×1
comparison ×1
data-binding ×1
datatemplate ×1
dynamic ×1
f# ×1
git ×1
git-rebase ×1
grid-layout ×1
interface ×1
renaming ×1
scrollviewer ×1
task ×1
treeview ×1
xaml ×1