WPF рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рддреИрдирд╛рдд рддрддреНрд╡

рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ WPF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред рдЬреНрдпрд╛рджрд╛рддрд░ рдлреНрд▓реЛрдбреИрдХреНрдЬрд┐рдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдХреА рд╢реИрд▓реА рдореЗрдВ рдпреВрдЖрдИ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдмрд╛рд░реАрдХреА рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
CSS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTML рддрддреНрд╡реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЗ рдЖрджреА, рдореИрдВ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡реЛрдВ рдХреА рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛ред рдЧреБрдг рд╢реАрд░реНрд╖, рдмрд╛рдПрдВ, рджрд╛рдПрдВ, рдиреАрдЪреЗ рдЕрд╕реНрдерд╛рдпреА WPF рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВред MSDN рдиреЗ рдХреЗрд╡рд▓ рдЪрд┐рддреНрд░рд╛ рд╡рд░реНрдЧ рдЬрд╛рд░реА рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм HorDOffmentScrollViewer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣реЛрд░рд┐рдЬреЛрдВрдЯрд▓рдСрдлрд╝рд╕реЗрдЯ рдФрд░ рд╡рд░реНрдЯрд┐рдХрд▓рдСрдлрд╝рд╕реЗрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред Google рдЦреЛрдЬ рдиреЗ рднреА рдорджрдж рдирд╣реАрдВ рдХреАред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдерд╛ред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЬрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА WebKit рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИред рдПрдХ рдмреНрд▓реЙрдЧ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рд╕реНрд░реЛрдд рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдХреЗ рдкрджреЛрдВ рдХреА рд╡реЗрдмрдХреЛрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдереАред рдЗрд╕ рдкреГрд╖реНрда рдореЗрдВ рдореБрдЦреНрдп рд╡рд╛рдХреНрдпрд╛рдВрд╢ рднреА рд╢рд╛рдорд┐рд▓ рдерд╛, рдЬрд┐рд╕рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдпрд╛: "рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рдПрдХ рдкреЗрдВрдЯ-рдЯрд╛рдЗрдо рдЕрдиреБрд╡рд╛рдж рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ", рдЬреЛ рд░реВрд╕реА рдореЗрдВ: "рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рд┐рд▓рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ"ред

рдЗрд╕ "рдкреЛрд╕реНрдЯрдСрдЙрдЯ" рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдореИрдВрдиреЗ WPF рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рди рдЦреЛрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдкрд╛рда рдкреНрд░рднрд╛рд╡

рдпрджрд┐ UIElement рдХреЗ рд▓рд┐рдП рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рд░реЗрдВрдбрд░рдЯреНрд░рд╛рд╕рдлреЙрд░реНрдо рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо, рд░реЛрдЯреЗрдЯ рдФрд░ рд╕реНрдХреЗрд▓ рдХреЗ 2 рдбреА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ TextEffect рдХреНрд▓рд╛рд╕ рд╣реИред

рддреЛ, рдЪрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВред рдмреНрд▓реЙрдЧ рдкреЗрдЬ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


<div style="border:5px solid black; padding:20px; width:300px; margin-left:auto; margin-right:auto"> Here is a line of text. <span style="position:relative;top:-10px; background-color:#eeeeee">This part is shifted<br> up a bit</span>, but the rest of the line is in its original position. </div> 

рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд┐рдирд╛ WPF рдХреЗ рд▓рд┐рдП:


 <FlowDocumentScrollViewer> <FlowDocumentScrollViewer.Document> <FlowDocument Name="doc" FontFamily="Verdana" FontSize="12px" LineHeight="18px"> <Paragraph Padding="20px" BorderThickness="5px" BorderBrush="Black"> Here is a line of text. <Span Name="shiftedText" Background="#EEE">This part is shifted<LineBreak/> up a bit </Span>, but the rest of the line is in its original position. </Paragraph> </FlowDocument> </FlowDocumentScrollViewer.Document> </FlowDocumentScrollViewer> 

TextEffect рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ Run рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрдм рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдПрдХ рд╕реНрдкреИрди, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрддреНрд╡ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

 void DoEffect() { foreach (var run in shiftedText.Inlines.OfType<Run>()) { TextEffect f = new TextEffect(); TranslateTransform t = new TranslateTransform(0, -10d); f.Transform = t; int selectionStart = doc.ContentStart.GetOffsetToPosition(run.ElementStart); int selectionLength = run.ElementStart.GetOffsetToPosition(run.ElementEnd); f.PositionStart = selectionStart; f.PositionCount = selectionLength; run.TextEffects.Add(f); } } 

рдФрд░ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб:

 void UndoEffect() { foreach (var run in shiftedText.Inlines.OfType<Run>()) { run.TextEffects.Clear(); } } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдб рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдЖрдПрдЧрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In128209/


All Articles