سؤال

أنا أستخدم WPF ولدي جدول داخل عنصر تحكم RichTextBox.أحتاج إلى الحصول على لون خلفية خلية الجدول لتغييره بحيث يحصل على التركيز.مشكلتي هي أنني لا أستطيع تشغيل GotFocus أو أي أحداث أخرى لـ TableCell.

<RichTextBox>
    <FlowDocument>
       <Table>
           <Table.Columns> 
              <TableColumn />
           </Table.Columns>
           <TableRowGroup>
               <TableRow>
                   <TableCell GotFocus="SelectionCell_GotFocus">
                       <Paragraph>1</Paragraph>
                   </TableCell>
               </TableRow>
           </TableRowGroup>
       </Table>
    </FlowDocument>
</RichTextBox>

توضح الصورة أدناه الجدول الموجود في عنصر التحكم RichTextBox.ما أود أن أكون قادرًا على فعله هو تغيير الخلفية أثناء تنقل المستخدم بين خلايا الجدول.

نص بديل http://img16.imageshack.us/img16/8151/wpftable.png

يحرر:بعد مزيد من الاستقصاء، لا تقتصر المشكلة على الجداول الموجودة في RichTextBox، ويبدو أنه لا يوجد عنصر تحكم في RichTextBox قادر على إنشاء أحداث.لقد وضعت زرًا فيه ولم أتمكن من جعله يطلق حدث النقر الخاص به.يبدو أن RichTextBox يخفي جميع الأحداث، ونأمل أن تكون هناك طريقة لكشفها.

هل كانت مفيدة؟

المحلول

والنصف الجواب هو لتعيين الخاصية IsDocumentEnabled على RichTextBox إلى true. التي تسمح الضوابط داخلها للتمكن حسب <لأ href = "http://social.msdn.microsoft.com/forums/en-US/wpf/thread/5372c48e-3040-4312-8263-59616e6728a8/" يختلط = "نوفولو noreferrer"> عناصر UI جزءا لا يتجزأ في RichTextBox . للأسف ما زال لا إطلاق الحدث أحتاج وهو GotFocus على TableCell على الرغم من أنه من الممكن الحصول على هذا الحدث لاطلاق النار عن طريق وضع زر في الخلية والنقر عليه. أن فقاعات الحدث GotFocus فوق شجرة UI إلى TableCell. أنا لا أريد زر في كل خلية على الرغم من الوقت للبحث عن حل بديل.

<RichTextBox IsDocumentEnabled="True">
    <FlowDocument>
        <Table>
            <Table.Columns> 
                <TableColumn />
            </Table.Columns>
            <TableRowGroup>
                <TableRow>
                    <TableCell GotFocus="SelectionCell_GotFocus">
                        <BlockUIContainer>
                            <Canvas>
                                <Button Click="Button_Click">
                                    Click
                                </Button>
                            </Canvas>
                        </BlockUIContainer>
                    </TableCell>
                </TableRow>
            </TableRowGroup>
        </Table>
    </FlowDocument>
</RichTextBox>

نصائح أخرى

تحديث

لقد وجدت ما يلي (في: http://www.databaseforum.info/8/504107.aspx) تمت تجربته ويعمل:

ContentElement، إحدى الفئات الأساسية للفقرة وبالمناسبة، الفئة الأساسية لكل شيء موجود في المستند تحدد الخصائص والأحداث التي تبحث عنها.

في الكود

void MyCode() 
{
    Paragraph p = new Paragraph();
    p.MouseEnter += p_MouseEnter;
}

void p_MouseEnter(object sender, EventArgs e) 
{
    Paragraph p = (Paragraph)sender;
    p.Background = Brushes.Red;
}

**In Markup**

<Paragraph MouseEnter="p_MouseEnter" />

**You can also trigger on properties like IsMouseOver in styles**
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top