ฉันใช้เวลาทั้งเย็นเพื่อพยายามทำความเข้าใจและแก้ไขปัญหาที่ฉันกำลังประสบกับแถบเครื่องมืออยู่ในขณะนี้ :
ฉันได้สร้างโปรแกรมวาดภาพแบบเวกเตอร์เล็กๆ ซึ่งผู้ใช้สามารถเลือกเครื่องมือได้ (การเลือก เส้น ข้อความ รูปภาพ ฯลฯ...) โดยการคลิกที่ไอคอนที่เกี่ยวข้องซึ่งอยู่ในแถบเครื่องมือก่อนใช้งาน
เมื่อเลือกเครื่องมือบางอย่าง การควบคุมใหม่จะปรากฏในแถบเครื่องมือ (มีการมองเห็น ซึ่งเดิมตั้งค่าให้ยุบ เปลี่ยนเป็นมองเห็นได้) ทำให้ผู้ใช้สามารถเปลี่ยนพารามิเตอร์ได้
ตัวอย่างเช่น เมื่อคลิกที่เครื่องมือข้อความ ช่องจะปรากฏขึ้นเพื่อให้ผู้ใช้สามารถเขียนเนื้อหาได้ เมื่อเลือกเครื่องมือรูปภาพ ปุ่มจะปรากฏขึ้นเพื่อเปิด OpenFileDialog (เพื่อเลือกไฟล์ต้นฉบับ) ฯลฯ ฯลฯ...
ปัญหาคือว่า ในสถานการณ์เฉพาะ องค์ประกอบบางอย่างที่ควรปรากฏขึ้นเมื่อเลือกเครื่องมือที่เกี่ยวข้องนั้นถูกซ่อนไว้ แม้ว่าจะถูกตั้งค่าการมองเห็นให้เป็นจริงในโค้ดก็ตาม และตัวควบคุมที่ขาดหายไปก็ไม่ได้อยู่ในส่วนโอเวอร์โฟลว์ของแถบเครื่องมือเช่นกัน
ค่อนข้างอธิบายยาก นี่คือตัวอย่างซอร์สโค้ดซึ่งเลียนแบบแอปของฉันและแสดงปัญหา : สร้างโปรเจ็กต์ C# wpf ใหม่ จากนั้นคัดลอกโค้ดต่อไปนี้ใน MainWindow.xaml
<Window x:Class="DDI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DDI" Height="250" Width="318">
<DockPanel Width="Auto" Height="Auto" LastChildFill="True">
<StackPanel DockPanel.Dock="Top" ToolBarTray.IsLocked="True">
<Menu>
<MenuItem Header="Fichier">
<MenuItem Header="Nouveau" />
<MenuItem Header="Ouvrir" />
<Separator />
<MenuItem Header="Quitter" />
</MenuItem>
</Menu>
<ToolBar Name="toolbar">
<ToggleButton Name="tool_selection" Height="16" Width="16" Click="tool_selection_Click" Background="Yellow">
</ToggleButton>
<ToggleButton Name="tool_text" Height="16" Width="16" Click="tool_text_Click" Background="Red">
</ToggleButton>
<ToggleButton Name="tool_image" Height="16" Width="16" Click="tool_image_Click" Background="Blue">
</ToggleButton>
<Separator Name="tool_separator1" Margin="4,2" />
<TextBlock Name="tool_name_caption" VerticalAlignment="Center" Margin="0,0,4,0" Visibility="Collapsed">
Name :
</TextBlock>
<TextBox Name="tool_name_field" Width="80" BorderBrush="#FF6F6F6F" Visibility="Collapsed">
</TextBox>
<TextBlock Name="tool_content_caption" VerticalAlignment="Center" Margin="4,0,4,0" Visibility="Collapsed">
Content :
</TextBlock>
<TextBox Name="tool_content_field" Width="100" BorderBrush="#FF6F6F6F" Visibility="Collapsed">
Your text
</TextBox>
<TextBlock Name="tool_source_caption" VerticalAlignment="Center" Margin="4,0,4,0" Visibility="Collapsed">
Source :
</TextBlock>
<TextBox Name="tool_source_field" Width="80" BorderBrush="#FF6F6F6F" IsReadOnly="True" AllowDrop="False" Visibility="Collapsed">
</TextBox>
<Button Name="tool_source_select" BorderBrush="#FF6F6F6F" Visibility="Collapsed">
...
</Button>
<TextBlock Name="tool_z_caption" VerticalAlignment="Center" Margin="4,0,4,0" Visibility="Collapsed">
Z :
</TextBlock>
<TextBox Name="tool_z_field" Width="30" BorderBrush="#FF6F6F6F" Visibility="Collapsed">
0
</TextBox>
</ToolBar>
</StackPanel>
<ScrollViewer HorizontalScrollBarVisibility="Visible">
<Canvas Name="workspace" Background="White">
</Canvas>
</ScrollViewer>
</DockPanel>
And the following lines in the corresponding *.cs file :
using System.Windows;
namespace DDI
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
SelectSelectionTool();
}
private void tool_selection_Click(object sender, RoutedEventArgs e)
{
SelectSelectionTool();
}
private void tool_text_Click(object sender, RoutedEventArgs e)
{
SelectTextTool();
}
private void tool_image_Click(object sender, RoutedEventArgs e)
{
SelectImageTool();
}
private void SelectSelectionTool()
{
tool_selection.IsChecked = true;
tool_text.IsChecked = false;
tool_image.IsChecked = false;
tool_separator1.Visibility = Visibility.Collapsed;
tool_name_caption.Visibility = Visibility.Collapsed;
tool_name_field.Visibility = Visibility.Collapsed;
tool_content_caption.Visibility = Visibility.Collapsed;
tool_content_field.Visibility = Visibility.Collapsed;
tool_source_caption.Visibility = Visibility.Collapsed;
tool_source_field.Visibility = Visibility.Collapsed;
tool_source_select.Visibility = Visibility.Collapsed;
tool_z_caption.Visibility = Visibility.Collapsed;
tool_z_field.Visibility = Visibility.Collapsed;
}
private void SelectTextTool()
{
tool_selection.IsChecked = false;
tool_text.IsChecked = true;
tool_image.IsChecked = false;
tool_separator1.Visibility = Visibility.Visible;
tool_name_caption.Visibility = Visibility.Visible;
tool_name_field.Visibility = Visibility.Visible;
tool_content_caption.Visibility = Visibility.Visible;
tool_content_field.Visibility = Visibility.Visible;
tool_source_caption.Visibility = Visibility.Collapsed;
tool_source_field.Visibility = Visibility.Collapsed;
tool_source_select.Visibility = Visibility.Collapsed;
tool_z_caption.Visibility = Visibility.Visible;
tool_z_field.Visibility = Visibility.Visible;
}
private void SelectImageTool()
{
tool_selection.IsChecked = false;
tool_text.IsChecked = false;
tool_image.IsChecked = true;
tool_separator1.Visibility = Visibility.Visible;
tool_name_caption.Visibility = Visibility.Visible;
tool_name_field.Visibility = Visibility.Visible;
tool_content_caption.Visibility = Visibility.Collapsed;
tool_content_field.Visibility = Visibility.Collapsed;
tool_source_caption.Visibility = Visibility.Visible;
tool_source_field.Visibility = Visibility.Visible;
tool_source_select.Visibility = Visibility.Visible;
tool_z_caption.Visibility = Visibility.Visible;
tool_z_field.Visibility = Visibility.Visible;
}
}
}
ตอนนี้เปิดแอปพลิเคชัน อย่าพยายามปรับขนาดตอนนี้เพื่อดูปัญหา !
เครื่องมือสีเหลืองคือเครื่องมือที่เลือกอยู่ในปัจจุบัน ดำเนินการตามลำดับนี้: คลิกที่ปุ่มสีแดง : องค์ประกอบใหม่จะปรากฏขึ้น คลิกที่ปุ่มสีน้ำเงิน : องค์ประกอบบางส่วนยังคงอยู่ บางส่วนหายไป แต่น่าแปลกที่บางส่วนหายไป: "แหล่งที่มา :" TexBlock, กล่องข้อความ tool_source_file และปุ่ม "..." ลองปรับขนาดหน้าต่าง : ตัวควบคุมที่ขาดหายไปทั้งสามปรากฏขึ้นมาด้วยเวทย์มนตร์ (ไม่มีอยู่ในส่วนที่ล้นของแถบเครื่องมือ ซึ่งไม่ได้ใช้งานมาก่อน)
อีกวิธีในการดูปัญหา:
- เปิดแอป
- เครื่องมือสีเหลืองคือเครื่องมือที่เลือกอยู่ในปัจจุบัน
- คลิกที่ปุ่มสีแดง
- คลิกที่ปุ่มสีน้ำเงิน
- คลิกที่ปุ่มสีแดง
- คลิกที่ปุ่มสีน้ำเงิน : ตอนนี้ตัวควบคุมที่ขาดหายไปสามตัวปรากฏขึ้นในตำแหน่งที่ถูกต้อง!
คำถามของฉันง่าย ๆ : เกิดอะไรขึ้น?
ฉันได้ลองหลายอย่างแล้ว รวมถึงการใช้เวอร์ชันที่แตกต่างกันของ invalidate กับแถบเครื่องมือหลังจากเปลี่ยนการมองเห็นรายการ การแยกแถบเครื่องมือออกเป็นสองแผง ฯลฯ แต่ก็ไม่ได้ผล
ขอบคุณสำหรับคำตอบของคุณ
ฉันจะลองใช้รหัสของคุณในไม่ช้าโทนี่
ฉันได้ส่งปัญหาบนเว็บไซต์ Microsoft แล้ว แต่ดูเหมือนว่าพวกเขาไม่ได้ดูคำแนะนำเว้นแต่ว่าพวกเขาจะได้รับ 5 โหวต ดังนั้นโปรดลงคะแนนให้: https://connect.microsoft.com/WPF/feedback/details/638552/changing-visibility-of-toolbar-components-to-visible-does-not-make-พวกเขาปรากฏ-เหตุการณ์-in-the-overflow-part-of-the-toolbar#details
ความนับถือ