【问题标题】:C# User Interface Printing Image on Screen ProblemC#用户界面在屏幕上打印图像问题
【发布时间】:2020-04-18 06:53:30
【问题描述】:

当用户单击按钮时,我正在尝试打印图像。第一次点击工作正常并打印图像,但其他点击没有按我预期的那样工作。即使我单击另一个按钮,也会显示第一个图像。例如,当我点击厨师时,它会打印正确的图像,然后我点击蔬菜,但它仍然显示厨师的图像。这段代码有什么问题?

public partial class MainWindow : Window, INotifyPropertyChanged
    {
        public ObservableCollection<string> selectedMenu = new ObservableCollection<string>();

        public ObservableCollection<string> ChefsMenu = new ObservableCollection<string>();
        public ObservableCollection<string> VegMenu = new ObservableCollection<string>();
        public ObservableCollection<string> LowCMenu = new ObservableCollection<string>();
        public ObservableCollection<string> orders = new ObservableCollection<string>();
private void ChefsButtonDown(object sender, MouseButtonEventArgs e)
        {
            chefFlag = true;
            vegFlag = false;
            lowFlag = false;
            int len = ChefsMenu.Count;
            for(int i = 0; i < len; i++)
            {
                selectedMenu.Add(ChefsMenu[i]);
            }
            ShowPanel.ItemsSource = null;
            ShowPanel.Items.Refresh();
            ShowPanel.ItemsSource = selectedMenu;
        }

        private void VegButtonDown(object sender, MouseButtonEventArgs e)
        {
            chefFlag = false;
            vegFlag = true;
            lowFlag = false;
            int len = VegMenu.Count;
            for (int i = 0; i < len; i++)
            {
                selectedMenu.Add(VegMenu[i]);
            }
            ShowPanel.ItemsSource = null;
            ShowPanel.Items.Refresh();
            ShowPanel.ItemsSource = selectedMenu;
        }

        private void LowCButtonDown(object sender, MouseButtonEventArgs e)
        {
            chefFlag = false;
            vegFlag = false;
            lowFlag = true;
            int len = LowCMenu.Count;
            for (int i = 0; i < len; i++)
            {
                selectedMenu.Add(LowCMenu[i]);
            }
            ShowPanel.ItemsSource = null;
            ShowPanel.Items.Refresh();
            ShowPanel.ItemsSource = selectedMenu;
        }
public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

XAML

<ItemsControl DockPanel.Dock="Left" Name="ShowPanel" ItemsSource ="{Binding Path=selectedMenu}" Width="690" Height="320">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Border BorderBrush="LightGreen" BorderThickness="0.5">
                            <TextBlock Text="{Binding Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" HorizontalAlignment="Left" Width="97" TextWrapping="Wrap"/>
                        </Border>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

【问题讨论】:

    标签: c# .net xaml user-interface


    【解决方案1】:

    您只在类开始时实例化了一次 selectedMenu 对象,如下所示:

    public ObservableCollection<string> selectedMenu = new ObservableCollection<string>();
    

    从那一刻起,每次单击按钮时,都会将相应的元素添加到 selectedMenu 中。如果有一些以前的项目,它们不会被删除。

    所以在每个按钮的单击事件处理程序的开头添加对 clear 方法的调用,类似于:

    selectedMenu.Clear()
    

    您将在三个地方执行此操作,因为您有三个按钮单击事件处理程序。之后,每当您单击任何按钮时,都会先删除以前的项目,然后再添加新项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多