小编Yae*_*ael的帖子

如何在WPF/C#中创建自定义MultiSelector/ItemsControl

我正在尝试在C#/ WPF中创建一个图表应用程序.我想要的有点类似于Microsoft Visio,虽然我不想克隆它.我正在编写这个问题,因为我正在编码,只是把我遇到的所有问题都放进去,以防有人发现它有用.也许我一直在想太难,但我觉得我可以呕吐键盘并生成更好的代码,所以请随意给出你抓到的每个细节的任何建议(语法排除:-))

简而言之:
为什么所有项目都位于(0,0)?

码:

public class Diagram : MultiSelector
{
    public Diagram()
    {
        this.CanSelectMultipleItems = true;

        // The canvas supports absolute positioning
        FrameworkElementFactory panel = new FrameworkElementFactory(typeof(Canvas)); 
        this.ItemsPanel = new ItemsPanelTemplate(panel);


        // Tells the container where to position the items
        this.ItemContainerStyle = new Style();
        this.ItemContainerStyle.Setters.Add(new Setter(Canvas.LeftProperty, new Binding("X")));
        this.ItemContainerStyle.Setters.Add(new Setter(Canvas.TopProperty, new Binding("Y")));
    }

    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        FrameworkElement contentitem = element as FrameworkElement;
        Binding leftBinding = new Binding("X");
        Binding topBinding = new Binding("Y");
        contentitem.SetBinding(Canvas.LeftProperty, …
Run Code Online (Sandbox Code Playgroud)

c# wpf custom-controls itemscontrol

2
推荐指数
1
解决办法
6470
查看次数

ItemPropertyChanged无法处理observableCollection.Why?

我已经搜索了高低的解决方案,但我似乎没有找到它的底部.像网上的很多帖子我似乎没有让我的itemPropertyChanged工作.编辑集合中的项目时不会触发.为什么.

有点长,但这是我放在一起的一个例子.

我有一个customerViewModel,它包含一个OrderViewModel集合,当编辑datagrid中的事件不会触发时.

我已经实现了以下内容,但只有在加载时才会被解雇.好像它不是同一个东西的集合......

INotifyPropertyChanged inpc = OrderViewModels;
inpc.PropertyChanged += OnItemPropertyChanged; 
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?这让我很生气

楷模

public class Order
{
    public int Id { get; set; }
    public string Description { get; set; }
    public int CustomerId{ get; set; }
}

public class Customer
{
    public Customer()
    {
        Orders=new ObservableCollection<Order>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname{ get; set;}
    public ObservableCollection<Order> Orders{ get; set;}

}
Run Code Online (Sandbox Code Playgroud)

的ViewModels

public class CustomerViewModel : ViewModelBase
{ …
Run Code Online (Sandbox Code Playgroud)

c# wpf

2
推荐指数
1
解决办法
2594
查看次数

将可见性绑定到ReactiveCommand CanExecute

我的xaml中有几个Tiles(TileLayoutControl类)(本例中只显示了2个),其可见性绑定到布尔属性并通过BooleanToVisibilityConverter转换.
这很好用.我的问题是

我可以将可见性绑定到Command,以便我可以删除那些几个布尔属性的需要吗?

类似于将Visibility绑定到Command.CanExecute的东西

如果是,我该如何实现?任何帮助将非常感谢!谢谢.

<dxlc:Tile Command="{Binding Tile1Command}"
           Visibility="{Binding Path=IsTile1Visible , Converter={StaticResource BooleanToVisibilityConverter}}"/>
<dxlc:Tile Command="{Binding Tile2Command}"
           Visibility="{Binding Path=IsTile2Visible , Converter={StaticResource BooleanToVisibilityConverter}}"/>
Run Code Online (Sandbox Code Playgroud)

视图模型

private bool _isTile1Visible;
public bool IsTile1Visible
{
    get { return _isTile1Visible; }
    set { this.RaiseAndSetIfChanged(ref _isTile1Visible, value); }
}

public ReactiveCommand Tile1Command { get; private set; }

Tile1Command = new ReactiveCommand();
Tile1Command.Subscribe(p => PerformTile1Operation());
Run Code Online (Sandbox Code Playgroud)

wpf visibility system.reactive canexecute reactiveui

2
推荐指数
1
解决办法
2376
查看次数

依赖属性 UserControl 绑定不起作用

我的项目是用MVVM实现的。我有一个主窗口,它由状态栏和选项卡视图组成。在选项卡视图内,有一个名为“AnnotationView”的用户控件。Annotationview 是两个较小的用户控件(称为 TimePicker)的父控件。TimePicker 由两个文本框组成,一个用于小时,一个用于分钟。我想使用此 UserControl 两次(这也是我将其设为自己的 Control 的原因,以便稍后重用它)。

TimePicker 的 XAML:

<UserControl x:Class="archidb.Views.TimePicker"
             x:Name="TimePickerControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" Height="Auto" Width="Auto"
             KeyboardNavigation.TabNavigation="Local">

    <Grid DataContext="{Binding ElementName=TimePickerControl}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBox Style="{StaticResource TextBoxStyle}"
                 Text="{Binding Path=HourValue}"
                 x:Name="tbHours"
                 KeyboardNavigation.TabIndex="0"/>
        <TextBlock Style="{StaticResource TextBlockStyle}"
                   Margin="0 -3 0 5"
                   Text=":"
                   Grid.Column="1"/>
        <TextBox Grid.Column="2" Style="{StaticResource TextBoxStyle}"
                 Text="{Binding Path=MinuteValue}"
                 x:Name="tbMinutes"
                 KeyboardNavigation.TabIndex="1"/>
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

TimePicker 代码隐藏:

public partial class TimePicker : UserControl
{
    public static readonly DependencyProperty HourValueProperty = DependencyProperty.Register("HourValue", typeof(string), typeof(TimePicker), new PropertyMetadata("00"));
    public string HourValue …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml user-controls mvvm

2
推荐指数
1
解决办法
4471
查看次数

Listview项目中的UWP按钮

我正在开发我的第一个UWP应用程序,我希望创建一个这样的UI .对于每个列表项(项目),将有一组按钮.对于某些列表项(项目),某些按钮将被禁用一些.因此,我需要在这些列表项(项目)中禁用和更改此类按钮的图像.

我尝试使用像这样的列表视图来实现它.但我不知道如何根据条件启用/禁用其中一些按钮.

尝试添加DataContextChanged事件并尝试访问那里的按钮.但不知道我如何访问这些按钮.

请告诉我以下方法是否正确,或者是否有更好的方法来完成我在上图中尝试实现的目标.

 <ListView x:Name="stepsListView" Margin="10,0,0,0" RequestedTheme="Dark" FontSize="24" Background="{StaticResource procedure_app_white}" Foreground="Black" BorderThickness="1.5" BorderBrush="Transparent" ItemsSource="{Binding projectList}"  HorizontalAlignment="Left">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>

    <!-- Item -->
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="0,0,0,1" BorderBrush="#c0c0c0">
                <Grid Width="auto" HorizontalAlignment="Stretch" DataContextChanged="Grid_DataContextChanged" >
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="50"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock VerticalAlignment="Center" FontSize="30" Grid.Row="0" Grid.ColumnSpan="7" Text="{Binding projectName}" Foreground="{StaticResource procedure_app_orange_text }" />

                    <Button x:Name="warningButton" Width="40" Height="40" Grid.Column="1"  Grid.Row="1" Tag="{Binding projectId}" …
Run Code Online (Sandbox Code Playgroud)

c# xaml listview uwp uwp-xaml

2
推荐指数
1
解决办法
4409
查看次数

UserControl中的依赖属性绑定

我的解决方案是在MVVM中实现的.视图是一个托管用户控件的窗口.我已为此userControl创建了一个依赖项属性,如下所示:

public static DependencyProperty ListProperty = DependencyProperty.Register(
      "ItemsList", typeof(List<RequiredClass>), typeof(UsercontrolTest));

public List<RequiredClass> ItemsList
{
    get { return (List<RequiredClass>)GetValue(ListProperty); }
    set
    {
        SetValue(ListProperty, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

此属性绑定到xaml中的viewmodel属性(ListOfItems):

  <Window x:Class="TestProject.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:Test="clr-namespace:TestProject"
          Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>             
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Test:UserControlTest Grid.Row="0" ItemsList="{Binding Path=ListOfItems}" /> 
        <Button Grid.Row="1" Content="AddItems" Click="Button_Click" />
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

此外,我已将codebehind窗口的datacontext初始化为viewmodel.问题是绑定似乎永远不会发生,并且永远不会为依赖项属性调用set属性.我在这里错过了什么吗?

c# data-binding wpf xaml mvvm

1
推荐指数
1
解决办法
2215
查看次数

在datagrid文本框WPF中显示缺少的部分文本

我的项目中有一个数据网格,在获取字符串后,其中一部分不适合,因为它们太长了.我希望我的文本框列具有固定的大小,所以我不想为文本框使用"自动"宽度属性,但我想知道:是否有某种属性可以用来显示整个字符串?例如:如果字符串是长显示它的一部分你可以适合,然后显示三个点(...)或一些像这样的符号.点击三个点后显示文本框的整个值.或者甚至在滚动一些文本框后显示整个字符串.

我的数据网格看起来像这样.

在此输入图像描述

在那里你可以看到一些太长的字符串值被削减了.

这是数据网格中文本框的xaml代码.

<DataGrid Grid.Column="0" Grid.RowSpan="2" AutoGenerateColumns="False" Height="206" HorizontalAlignment="Left" Margin="12,265,0,0" Name="tabela" VerticalAlignment="Top" Width="556" SelectionChanged="tabela_SelectionChanged" ItemsSource="Binding MyObsCollection">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Type" Width="120" Binding="{Binding Type}"/>
        <DataGridTextColumn Header="MapTo" Width="120" Binding="{Binding MapTo}"/>
        <DataGridTextColumn Header="Name" Width="116" Binding="{Binding Name}"/>
    </DataGrid.Columns>     
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid textbox

1
推荐指数
1
解决办法
1886
查看次数

在图像控件中加载时动画图像

我想创建一个图像幻灯片。为此,我在每个设定的时间间隔后在图像控件中加载了新图像。但是每次我加载一个新图像时,它都没有任何动画,我需要用过渡动画或淡入淡出动画加载每个图像。如何在图像控件中更改图像时实现动画?以下是代码:

XAML:

<Grid>
<Image Source="{Binding CurrentImage}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

XAML文件

ViewModel = new ScreenSaverViewModel();
this.DataContext = ViewModel;
Run Code Online (Sandbox Code Playgroud)

视图模型.cs

/// <summary>
/// Gets the current image to display on the attract screen. Changes to this property 
/// cause the PropertyChanged event to be signaled
/// </summary>
public string CurrentImage
{
    get { return this.currentImage; }
    protected set
    {
        this.currentImage = value;
        this.OnPropertyChanged("CurrentImage");
    }
}

/// <summary>
/// Gets the observable collection of all images.
/// </summary>
public ObservableCollection<string> Images
{
    get { …
Run Code Online (Sandbox Code Playgroud)

c# wpf animation xaml image

1
推荐指数
1
解决办法
2511
查看次数

使用Mvvm时将datacontext viewmodel绑定到usercontrol视图

我需要一些帮助将viewModel绑定到我创建的两个usercontrol视图.

创建了一个应该包含这两个用户控件的预留窗口.

我得到了什么:

  • ReservationView(窗口)
  • ReservationListView(Usercontrol)
  • ReservationDetailView(Usercontrol)

ReservationView(Window)类

public partial class ReservationView : Window
{
    public ReservationView()
    {
        InitializeComponent();
        //DataContext = null;              
    }
}
Run Code Online (Sandbox Code Playgroud)

ReservationListView(Usercontrol)类:

public partial class ReservationListView : UserControl, IViewReservationListViewModel
{
    public ReservationListView(IViewReservationListViewModel viewModel)
    {
        InitializeComponent();
        DataContext = viewModel;
    }
}
Run Code Online (Sandbox Code Playgroud)

IViewReservationListViewModel只是一个空接口,它在usercontrol视图和viewModel之间建立联系.

ReservationListViewModel

public class ReservationListViewModel : INotifyPropertyChanged, IViewReservationListViewModel
{
    public ReservationListViewModel()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在ReservationView中的xaml中设置本地:"usercontrol"时,我收到以下错误:

The type "ReservationListView" does not include any accessible constructors.
Run Code Online (Sandbox Code Playgroud)

当我使用MVVM时,如何将这两个usercontrol链接到相应的viewModel?

wpf xaml user-controls mvvm

1
推荐指数
1
解决办法
5997
查看次数

将WPF ComboBox绑定到实体

好吧,我已经搜索出了Interwebs的内容,似乎无法找到这个权利.我有一个ComboBox绑定到EntityFramework实体的CollectionViewSource.显示屏是显示名/姓的模板.问题是,当选择一个项目时,组合框的显示== object.ToString()(即MyCompany.Data.Professional)而不是有用的东西.

我确定我在这里错过了一处房产.ri是UserControl,SelectedPhysician是DependencyProperty

<ComboBox Grid.Column="1" Grid.Row="4"  x:Name="cmbReferringPhys"
      IsEditable="{Binding IsReadOnly}"
      ItemsSource="{Binding Source={StaticResource ProfessionalLookup}}"                                           
      SelectedItem="{Binding ElementName=ri, Path=SelectedPhysian, Mode=TwoWay, UpdateSourceTrigger=LostFocus, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}"                                            
      HorizontalAlignment="Left" VerticalAlignment="Top" Height="19.277" Width="300" 
      IsSynchronizedWithCurrentItem="True"
      SelectionChanged="ReferringPhy_SelectionChanged" TabIndex="4">
 <ItemsControl.ItemTemplate>
   <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="120" />                                
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding FirstName}" Grid.Column="0"  Margin="4,0" />
            <TextBlock Text="{Binding LastName}"  Grid.Column="1" Margin="4,0"/>
        </Grid>                                                                   
    </DataTemplate>
</ItemsControl.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

data-binding wpf combobox entity-framework

0
推荐指数
1
解决办法
3591
查看次数